# Dashboard

Your central hub for updates, quick links, and key resources — access new features, integrations, and documentation all in one place.

## Release notes

{% hint style="info" %}

17.08.2026&#x20;

<i class="fa-file-brackets-curly" style="color:$primary;">:file-brackets-curly:</i> **AnyDoc reader step now available – August 2026**&#x20;

Introducing **AnyDoc**, a new step that lets you extract structured data from any document type using AI - payslips, bank statements, utility bills, tax declarations, and more. Define the fields you want extracted, configure validity rules and confidence thresholds, and the system reads and validates the data automatically. Available in both the **No-code workflow builder** and via **API**.

<p align="right"><a href="/pages/zp3PlfI2jqthOVkWQNJW#anydoc-reader" class="button secondary small" data-icon="rectangle-terminal">Developer guide</a> <a href="/pages/TDDeRXDR3qst5wOR0CYs#anydoc-reader" class="button primary small" data-icon="arrow-up-right-from-square">Build with no-code</a></p>
{% endhint %}

{% hint style="info" %}

11.08.2026&#x20;

<i class="fa-users" style="color:$primary;">:users:</i> **Group management now available in Manage – August 2026**&#x20;

**Groups**, previously manageable only via the **API**, can now be **created, edited, and deleted directly in the Manage backoffice**. Assign and update group membership without writing any code - ideal for day-to-day operator and routing management.

<p align="right"><a href="/pages/rA1jtXPZQc2eZi7l7nLP#other-methods" class="button secondary small" data-icon="rectangle-terminal">API reference</a> <a href="https://manage.identomat.com/groups" class="button primary small" data-icon="arrow-up-right-from-square">Go to Manage</a></p>
{% endhint %}

{% hint style="info" %}

14.01.2026

<i class="fa-nfc" style="color:$primary;">:nfc:</i> **NFC support added to SDKs – January 2026**

We’ve added **NFC reading support to our SDKs**, enabling secure chip-based verification for supported identity documents such as biometric passports and IDs.\
With this update, you can read data directly from the document's NFC chip for improved data accuracy. NFC capture can be enabled via configuration and is supported on compatible devices.

<p align="right"><a href="/pages/zp3PlfI2jqthOVkWQNJW#identity-document-verification" class="button secondary small" data-icon="square-code">Developer guide</a></p>
{% endhint %}

{% hint style="info" %}

25.08.2025

<i class="fa-building-columns" style="color:$primary;">:building-columns:</i>  **KYB now available - August 2025**

We’ve introduced **Know Your Business (KYB)** verification to help you onboard legal entities and organizations with the same flexibility as KYC. You can now create KYB sessions directly through the **API** or configure them seamlessly in the **No-code workflow builder**. This makes it easier than ever to integrate business verification into your processes. &#x20;

<p align="right"> <a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#kyb-know-your-business" class="button secondary small" data-icon="square-code">Developer guide</a> <a href="/pages/Vh2KVAtSKWFjwhJLdTBn" class="button secondary small" data-icon="arrow-progress">Build with no-code</a></p>
{% endhint %}

## **Quick access**

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>Product overview</strong></mark></td><td>Learn what Identomat offers, core features, and how it helps you streamline identity verification.</td><td><a href="/pages/UhDvrEwKiEEkYSQDU29s">/pages/UhDvrEwKiEEkYSQDU29s</a></td></tr><tr><td><mark style="color:$primary;"><strong>Get started</strong></mark></td><td>Step-by-step guide to set up your account, configure roles, and launch your first verification flow.</td><td><a href="/pages/jsSamWGbuqg1PP1VQba9">/pages/jsSamWGbuqg1PP1VQba9</a></td></tr><tr><td><mark style="color:$primary;"><strong>No-code workflow builder</strong></mark></td><td>Easily design and customize verification flows without coding, using drag-and-drop configurations.</td><td><a href="/pages/Vh2KVAtSKWFjwhJLdTBn">/pages/Vh2KVAtSKWFjwhJLdTBn</a></td></tr><tr><td><mark style="color:$primary;"><strong>Video KYC</strong></mark></td><td>Understand how live video identification works for operators and end-users, including compliance controls.</td><td><a href="/pages/qMezYAra47sEuMJsn6z8">/pages/qMezYAra47sEuMJsn6z8</a></td></tr><tr><td><mark style="color:$primary;"><strong>Integration</strong></mark></td><td>Explore different ways to integrate Identomat into your systems — via iframe, redirect, or backoffice.</td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2">/pages/0b9rYxbzZRr3nXjJ1NQ2</a></td></tr><tr><td><mark style="color:$primary;"><strong>API reference</strong></mark></td><td>Full technical reference for Identomat’s REST API with request/response examples.</td><td><a href="/pages/rA1jtXPZQc2eZi7l7nLP">/pages/rA1jtXPZQc2eZi7l7nLP</a></td></tr><tr><td><mark style="color:$primary;"><strong>SDKs</strong></mark></td><td>Mobile and web SDKs (iOS, Android, Flutter, React Native) with setup instructions and changelogs.</td><td><a href="/pages/cPdm6wwmOslG4B8xBhkw">/pages/cPdm6wwmOslG4B8xBhkw</a></td></tr></tbody></table>


# Introduction

Welcome to Identomat's documentation!

***

Identomat is an ID verification & KYC/AML platform for a wide range of business needs, maximizing pass rates without compromising the accuracy, security, or compliance. Whether you're looking to prevent fraud, comply with regulatory requirements, or enhance the customer onboarding experience, our platform offers the tools and flexibility to meet your needs.

### Overview <a href="#overview" id="overview"></a>

Identomat is designed to simplify the identity verification process through a combination of advanced technologies and a user-friendly interface. Our platform supports a wide range of verification methods, including:​​

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td> <mark style="color:$primary;"><strong>Identity document verification</strong></mark></td><td>Automatically verify government-issued IDs, passports, and other documents. Identomat provides truly global coverage by recognizing thousands of ID types from over 165 countries.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#identity-document-verification">/pages/0b9rYxbzZRr3nXjJ1NQ2#identity-document-verification</a></td></tr><tr><td><mark style="color:$primary;"><strong>Liveness check</strong></mark></td><td>Verify the genuine presence of an identity holder with Liveness checks using selfie video with (Active) or without (Passive) prompts.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#liveness-check">/pages/0b9rYxbzZRr3nXjJ1NQ2#liveness-check</a></td></tr><tr><td><mark style="color:$primary;"><strong>AML monitoring</strong></mark></td><td>Screening and ongoing monitoring of customers against thousands of watchlists, sanctions and PEP lists, and adverse media lists.</td><td></td><td><a href="/pages/rA1jtXPZQc2eZi7l7nLP#aml-screening">/pages/rA1jtXPZQc2eZi7l7nLP#aml-screening</a></td></tr><tr><td><mark style="color:$primary;"><strong>Address verification</strong></mark></td><td>Automated OCR and address validation for Proof of Address documents like bank statements, utility bills, etc., combined with location signals from IP &#x26; GPS.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#proof-of-address">/pages/0b9rYxbzZRr3nXjJ1NQ2#proof-of-address</a></td></tr><tr><td><mark style="color:$primary;"><strong>Video KYC</strong></mark></td><td>Single or multi-participant live video call verification with built-in AI-powered full eKYC functionality for Human-in-the-Loop workflows.</td><td></td><td><a href="/pages/qMezYAra47sEuMJsn6z8">/pages/qMezYAra47sEuMJsn6z8</a></td></tr><tr><td><mark style="color:$primary;"><strong>KYC questionnaires</strong></mark></td><td>Configurable solution for capturing necessary information for Customer Due Diligence with custom form builder and answers-based logic.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#user-questionnaire">/pages/0b9rYxbzZRr3nXjJ1NQ2#user-questionnaire</a></td></tr><tr><td><mark style="color:$primary;"><strong>Phone and email verifications</strong></mark></td><td>Verify a prospective customer's email address and phone number via OTP, enriching their profile and adding a layer of account security.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2#phone-number">/pages/0b9rYxbzZRr3nXjJ1NQ2#phone-number</a></td></tr><tr><td><mark style="color:$primary;"><strong>No-code configuration builder</strong></mark></td><td>Seamlessly configure and deploy KYC workflows from ID capture and verification to Proof of Address and AML screening, to human-in-the-loop, and more. </td><td></td><td><a href="/pages/Vh2KVAtSKWFjwhJLdTBn">/pages/Vh2KVAtSKWFjwhJLdTBn</a></td></tr><tr><td><mark style="color:$primary;"><strong>Ease of integration &#x26; customizability</strong></mark></td><td>Our advanced identity verification platform offers configurable workflows, customizable UI/UX, and a modular architecture, with an option to fully white label the solution.</td><td></td><td></td></tr></tbody></table>

With our powerful API and SDKs, you can easily integrate our identity verification services into your existing systems and workflows. We also provide extensive customization options to tailor the verification process to your specific business requirements.

### **Key features of Identomat** <a href="#key-features-of-identomat" id="key-features-of-identomat"></a>

Identomat's modular platform includes:

* Comprehensive KYC/AML feature set&#x20;
* iBeta Level 2 certified Liveness Check&#x20;
* Rapid verification time&#x20;
* Global ID coverage&#x20;
* High conversion rate&#x20;
* Robust deployment options&#x20;
* White label solution

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>100 x</strong></mark></td><td>100x faster account activation compared to manual verification</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>40 sec</strong></mark> </td><td>Avg. verification time</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>60%</strong></mark> </td><td>Lower customer abandonment</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>165+</strong></mark> </td><td>Countries &#x26; Territories</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>98%</strong></mark> </td><td>Conversion rate</td><td></td><td></td></tr></tbody></table>


# Get started

Create an account and learn how to use and integrate Identomat.

### Start using Identomat

To get started with Identomat, create an account on [manage.identomat.com.](https://manage.identomat.com/) If you already have an account, you can proceed with integration.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>Account setup</strong></mark></td><td>A detailed guide on how to set up your Identomat account.</td><td></td><td><a href="/pages/26WGHzsWKaqgEjuFYHSI">/pages/26WGHzsWKaqgEjuFYHSI</a></td></tr><tr><td><mark style="color:$primary;"><strong>Integration overview</strong></mark></td><td>Learn how to integrate Identomat with your system.</td><td></td><td><a href="/pages/NCUj9lIsVP0ryHkK2NjU">/pages/NCUj9lIsVP0ryHkK2NjU</a></td></tr></tbody></table>


# Account setup

Create a personal account to get started with Identomat.

### About your personal account

Personal accounts for Identomat are set up on [manage.identomat.com.](https://manage.identomat.com/) Through the management platform, you can access the dashboard, view detailed information on KYC (Know Your Customer) and KYB (Know Your Business) sessions, review applicants, create custom workflows, and retrieve your access key. To gain full access to all features on the Manage platform, your account must be verified by our team.

### Requesting an account

If you don’t yet have an Identomat account, please [contact our team](https://www.identomat.com/contact-us) to request access.

Our team will guide you through the onboarding process and provide credentials for the Manage platform.

### Sign in

1. Go to [manage.identomat.com](https://manage.identomat.com/)&#x20;
2. Enter your email address and password, and click **Sign In**.&#x20;

> 💡 If your account needs activation and you've been waiting more than one day, please [contact us](https://www.identomat.com/contact-us).


# User roles overview

Learn about the different user roles in the Identomat system—Administrator, Operator, Call center operator, and End-user—and their specific access levels and functions to support various workflows.

### Roles in Manage platform

Identomat offers three types of user roles in the Manage platform to accommodate various use cases and workflows: **Administrator**, **Operator**, and **Call center operator**.&#x20;

Users can hold multiple roles simultaneously if needed to fit their specific responsibilities.

* **Administrator**: The highest level of access within the Manage platform. Administrators have full access to all dashboard features, can create configurations, manage users, delete sessions, and adjust company settings. If the company is registered as a Reseller, Administrators can also create and manage sub-company accounts.
* **Operator**: The Operator role is tailored for agents and company representatives responsible for handling daily operational tasks. This includes reviewing and managing sessions, conducting live video verification calls, and overseeing routine verification processes.
* **Call center operator**: A specialized sub-role of the Operator, focused on conducting manual verification during live video calls. Call center operators can only view sessions assigned to them.

**Roles comparison table:**

<table><thead><tr><th width="209">Role</th><th width="196">Permissions</th><th>Special abilities</th></tr></thead><tbody><tr><td><strong>Administrator</strong></td><td>Full access</td><td>Manage users, settings, configurations, integration</td></tr><tr><td><strong>Operator</strong></td><td>Moderate access</td><td>Manage dashboard, verification sessions</td></tr><tr><td><strong>Call center operator</strong></td><td>Limited access</td><td>Receive user calls, manage own sessions</td></tr></tbody></table>

#### End-user

* **End-user**: End-users are not Manage platform accounts. This term refers to individuals undergoing the verification process — they interact with the verification widget only, not the Manage platform.


# Receiving calls

Call center operators can receive end-user calls and conduct the video verification process.

In Identomat's system, only users with the **Call center operator** role are responsible for receiving calls. When this role is enabled, a call toggle will appear at the top of the page. Activating this toggle allows the system to receive calls from end-users.

When an end-user initiates a call, an incoming call animation will appear, and the Call center operator will hear a ringing sound. After answering, the operator connects with the end-user and can begin the verification steps configured for that session.

If no Call Center Operator has the toggle active, incoming calls will not be received. Ensure at least one operator is available before end-users begin sessions with a video call step.

**Call center operators** may:

* Take live screenshots of the end-user.
* Fill out operator questionnaires during the session.
* Initiate KYC steps for the end-user.

For more details, see:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Video KYC</strong></mark></td><td>Learn how live video verification works, including the full operator and end-user flow, call controls, and compliance features.</td><td></td><td><a href="/pages/bmez9GTbL908eOVutwYc">/pages/bmez9GTbL908eOVutwYc</a></td></tr></tbody></table>


# Integration overview

Whether you're looking for a lightweight, front-end solution or a more comprehensive server-side integration, we've got you covered.

### Available integration options

Identomat can be integrated into your systems in several ways, depending on your technical requirements and use case. Choose the option that best fits your setup:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>No-code integration</strong></mark></td><td>Customize your verification flow and send verification links to end-users directly from the Manage platform — no development work required.</td><td></td><td><a href="/pages/XhW0Q99c8xPjlnDizbRR">/pages/XhW0Q99c8xPjlnDizbRR</a></td></tr><tr><td><mark style="color:blue;"><strong>Identomat SDKs</strong></mark></td><td>Native SDKs for iOS, Android, Flutter, and React Native. Covers setup, configuration, and key functionalities for seamless in-app identity verification.</td><td></td><td><a href="/pages/pNF9o4WdcSzYieGqk7Ld">/pages/pNF9o4WdcSzYieGqk7Ld</a></td></tr><tr><td><mark style="color:blue;"><strong>Identomat API</strong></mark></td><td>A REST API for full control over session creation, configuration, and result retrieval. Ideal for custom integrations and server-side workflows.</td><td></td><td><a href="/pages/rA1jtXPZQc2eZi7l7nLP">/pages/rA1jtXPZQc2eZi7l7nLP</a></td></tr></tbody></table>

Not sure which to use? Start with the **No-code integration** if you want to get up and running quickly. Choose the **API** or **SDKs** if you need to embed verification directly into your product.


# API access

To begin integrating with Identomat, you’ll need API keys to authenticate requests

### Obtaining API keys

* **Navigate to the API keys section**: Log into your Identomat dashboard and select **API keys** from the men&#x75;**,** nested under **Settings** .
* **Generate key**: In the API section, click the **Generate key** button.&#x20;
* **Whitelist IPs (optional):** You can restrict a key to a set of specific IP addresses, so that only requests from those IPs are accepted — requests from any other IP will be rejected. If no IPs are added, the key will accept requests from any IP. Whitelisted IPs aren't locked in at generation — you can add or remove them at any time from the key's settings.
* :exclamation: **Store securely**: Copy the generated API key and securely store it. For security purposes, the key will only be displayed once. If lost, you’ll need to generate a new one.

> 💡 **HMAC authorization**: For enhanced security, you can implement HMAC authorization using your secret key as the encryption key. This is optional but recommended for production environments.

### Procedure

The integration procedure consists of the following steps:

1. **Acquiring a `session_token`.**
2. **Redirecting the user's browser to widget.identomat.com.**
3. **Checking for a result.**

To acquire a `session_token`, the company server needs to call the **/begin** endpoint and provide the following arguments: `company_key`, `flags` and `steps`. The steps array contains the configuration for individual steps in the identification process, each of which can have its own set of flags specific to that step.&#x20;

**The endpoint used to create a session\_token:**

```
https://widget.identomat.com/begin/
```

For more details, see:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Developer guide</strong></mark></td><td>Step-by-step instructions and best practices for integrating and customizing our identity verification solutions.</td><td></td><td><a href="/pages/0b9rYxbzZRr3nXjJ1NQ2">/pages/0b9rYxbzZRr3nXjJ1NQ2</a></td></tr><tr><td><mark style="color:blue;"><strong>API Reference</strong></mark></td><td>Comprehensive details on endpoints, parameters, and response formats for seamless API integration.</td><td></td><td><a href="/pages/rA1jtXPZQc2eZi7l7nLP">/pages/rA1jtXPZQc2eZi7l7nLP</a></td></tr></tbody></table>


# Overview

No-code configurations allow you to create and customize identity verification workflows without writing any code. Use the intuitive interface to define steps that align with your business needs.

## Introduction

No-code configurations enable you to create and customize identity verification workflows **without writing a single line of code.** This feature provides a user-friendly interface where you can define steps, set parameters, and automate verification processes to meet your business requirements. Whether you're adjusting verification rules, adding extra security measures, or streamlining user onboarding, no-code configurations give you full control—without the need for development resources.

## **Key benefits**

1. **Ease of use** - A drag-and-drop or form-based interface allows anyone to configure workflows without technical expertise.
2. **Flexibility** – Customize workflows to fit different verification needs, such as KYC, AML screening, document validation or Proof of Address analysis.
3. **Faster deployment** – Make changes in real time without waiting for developers, ensuring quicker adaptation to regulatory or business needs.
4. **Scalability** – Easily modify and expand workflows as your company grows and verification requirements evolve.

## **How It Works**

Setting up a no-code Configuration involves a few straightforward steps:

1. **Access the no-code configurations** – Navigate to the Configurations section in your dashboard and create a new one.
2. **Define workflow steps** – Select from available verification steps such as **ID verification, Liveness, or Video KYC** to build your workflow.
3. **Set parameters** – Configure individual steps and overall workflow rules, such as redirecting users after verification is completed.
4. **Test and deploy** – Preview your workflow, make adjustments, and activate it by creating a new session or using the Configuration ID or Public URL.

## **Use cases**

No-code configurations can be applied in various scenarios, including:

* **Financial services** – Set up automated KYC workflows for new account openings.
* **E-commerce & Marketplaces** – Verify sellers and buyers before allowing transactions.
* **Gig economy & Hiring platforms** – Conduct identity and background verification for freelancers or employees.
* **Cryptocurrency & Fintech** – Implement compliance-driven checks for AML and fraud prevention.
* **Healthcare & Insurance** – Authenticate users before granting access to sensitive medical or policy data.


# Getting started

Prerequisites to create no-code configurations.

To start using No-code configurations, follow these steps to ensure a smooth setup and deployment:

### Ensure you have the right permissions

Before using No-code configurations, make sure you have the necessary access:

* This feature is **only available for the Administrator role**. (Refer to the [**User roles overview**](/get-started/user-roles-overview) for more details.)
* If you don’t have the required permissions, contact your system administrator or reach out to our support team for assistance.
* If you are an **Administrator** but the **`+ New configuration`** button is unavailable, your account may be on a **trial plan**. In this case, please contact us to enable full access.

### Navigate to the configurations section

* **Log in** to your dashboard and go to **Settings** in the navigation menu. Locate and click on the **Configurations** section.
* Click on **`+ New configuration`** to start building your workflow.
* If this is your first time using the feature, review the interface and available options. You can create **unlimited configurations**—this feature is **free to use on all paid plans**.

### Choose a verification type

Before selecting individual steps, choose the **verification type** for your workflow:

* **KYC (Know Your Customer)** – Designed for verifying individual users. Supports personal identity documents, liveness checks, video calls, and other individual-focused verification steps.
* **KYB (Know Your Business)** – Designed for verifying legal entities and organizations. Enables business document verification and related checks specific to companies and their representatives.

The selected verification type determines which steps are available in the workflow.

### **Review available verification steps**

Explore the verification steps available for your workflow, including:

* **ID verification** – Users submit identification documents for validation.
* **Liveness check** – Ensures the user is present and real during verification.
* **Video call** – Conducts live video-based verification sessions.
* **Proof of Address** – Includes verification of proof of address and analysis of other document types.

### **Create your first configuration**

* Finalize your flow by **dragging and dropping** or **selecting** the necessary verification steps.&#x20;
* Define key settings to match your verification requirements, such as:
  * **Required document types** (e.g., passport, ID card, driver’s license)
  * **Liveness retry limits** to control the number of user attempts
  * **Redirect URLs** after successful or failed verification
  * **Allowed document countries** to specify accepted regions
* Once all settings are in place, **save your configuration** to make it available for use.

### **Test before going live**

* Run sample test sessions from the dashboard to validate the workflow's behavior. You can create a test session by selecting your configuration and clicking **Generate link**.
* Check for:
  * Proper step execution and flow
  * Accurate verification results
  * Expected redirections and notifications
* Make necessary adjustments based on test results.

### **Deploy and monitor**

* Once your configuration is finalized, deploy it by:
  * **Creating a new session** from the dashboard
  * Using the **Configuration ID** in API requests
    * *Your* *Configuration ID is available on the configuration detail page.*
  * Sharing the **Public URL** for end-user access
* Once deployed, monitor verification results and session statuses from the **Dashboard**.


# Localization

Translate questionnaires, step titles, descriptions, and other UI texts directly within the Configuration builder so end-users see the verification widget in their preferred language.

### How localization works

**Prerequisite: the Language step**

* **Purpose**: Localization only becomes available once a **Language step** is added to your configuration. This step defines which additional languages users can choose from during verification.
* **Tip**: Add the Language step first, then come back to translate your content — if no Language step exists, the builder behaves as single-language and the language selector won't appear.

### **The language selector**

* **Purpose**: Once a Language step exists, a selector appears at the bottom of the Configuration builder, letting you choose which language you're currently editing content for.
* **How it works**:
  * The selector is visible at all times, no matter which step or section you're working on
  * Your **default language** (set in Configuration settings) is always listed first and pre-selected
  * All other languages you've added via the Language step appear below it
  * Use the search field to quickly find a language in a long list
  * Click **Add more** to jump to the Language step and add or remove available languages
* **Tip**: Think of the selector as a *"which language am I typing in right now"* switch — it applies to every translatable field in the builder: step titles, descriptions, questionnaire titles, questions, options, and prefilled answers.

***

### Editing modes

**Default language — full editing**

When the default language is selected, you have full control over your configuration:

* Add or remove questions and options
* Edit structure and keys, adjust step parameters.
* Edit all titles, labels, and descriptions

This is your "source of truth" — all translations reference back to whatever is written here.

**Translation language — translation-only mode**

* **Purpose**: When you switch to any non-default language, the builder enters a restricted **translation-only mode**, so you can safely add wording without accidentally changing the structure of your flow.
* **What happens**:
  * Every text field shows your default-language text as a **placeholder**, so you always have the original to translate from
  * Structural editing is disabled — you can only edit text, not add, remove, or reorder anything
* **Tip**: If you need to restructure anything (add a question, remove an option, etc.), switch back to the default language first — translation mode is purely for wording.

**If your configuration has errors**

* If you try to enter translation mode while your configuration has unresolved errors, you'll see a **"Fix errors before translating"** prompt asking you to resolve them first.
* **Tip**: Resolve validation errors in the default language before starting translation work, to avoid this interruption.

***

#### Saving translations

* There's no separate "Done" button for translations — everything is saved using the main **Save** button, just like your default-language content.
* You can translate as much or as little as you like:
  * Only languages you've actually edited are stored
  * Only fields you've actually translated contain that language's text
  * Partial translations are completely fine — nothing needs to be "complete" before saving

***

#### How the widget displays translations

* **Purpose**: Controls what an end-user sees when they use the verification widget in their selected language.
* **How it works**:
  * If a translation exists for the user's language, it's shown
  * If a translation is missing for a specific field, the widget automatically falls back to the default language for that field only
  * Partial translations never cause errors — users simply see a mix of translated and default-language text where needed

**Changing your default language later**

If you change the default language after content already exists, the system automatically remaps your existing content to the new default language key — and never overwrites content that already exists under that key. This makes it safe to change your default language without losing translated work.


# Configuration settings

Understanding configuration settings on the first tab of no-code builder

The first tab of the No-Code Builder is where you will find essential settings to customize and configure your workflow.&#x20;

## Configuration settings

The **Configuration settings** section includes key configurations related to the identification and organization of your workflows. Here’s an overview of the settings you’ll encounter:

### Configuration name

* **Purpose**: The name assigned to the configuration to easily identify it in your dashboard. It must be unique across your company, but it can be changed at any time.
* **Tip**: Choose a descriptive name that reflects the purpose or specific use of the configuration (e.g., "Standard ID verification flow" or "KYC onboarding"). This makes it easier to locate and manage workflows.

### Configuration ID

* **Purpose**: A unique identifier automatically generated when you create a configuration. This ID is used to reference the configuration in API requests, ensuring that the correct workflow is applied during user verification.
* **Tip**: Use the Configuration ID in API calls or when linking the configuration to external systems. Keep it handy for integration purposes.

### Public URL

* **Purpose**: The Public URL provides external access to your verification flow. Share it with users to direct them to the verification process — via invitation emails, embedded links, or other channels.
* **How it works**: Each Public URL contains a unique `public_config_id` parameter that identifies your verification flow:

```
  https://widget.identomat.com/launch/?public_config_id=<public-id>
```

When a user opens this URL, the platform automatically creates a new session and redirects them to a unique session URL:

```
  https://widget.identomat.com/?session_token=<generated_token>
```

The `public_config_id` stays the same for all users — a fresh `session_token` is generated for each individual session.

* **Activation**: The Public URL is **disabled by default**. You will need to **enable** it before you can copy and share the link.
* **Temporarily disabling**: Turning off the Public URL disables access without permanently removing it. You can re-enable it at any time.
* **Refreshing the URL**: Use the **`Refresh`** button to permanently replace the current Public URL with a new one. This generates a new `public_config_id`, invalidating the previous URL — anyone using the old link will no longer be able to access the flow. **This action cannot be undone.**
* **Tip**: Only share the Public URL with trusted parties. If access needs to be paused temporarily, disable the URL rather than refreshing it, so you can restore it later.

### Default language

* **Purpose**: Set the default language for the verification flow. This defines the language in which the verification steps, instructions, and notifications will be displayed to the user.
* **Tip**: Choose the language that best matches the primary user base for this workflow. If you're unsure of the user's preferred language in advance, you can configure a **Language step** in the **Steps tab**.
  * In this case, the **default language** you select here will be pre-selected for the user when they first encounter the language selection step. However, users will still have the option to change it if they prefer a different language.

### Groups with access

* **Purpose:** Define which user groups within your company are allowed to use this configuration. This setting controls visibility and access at the group level. \
  If you select one or more groups, *only* members of those groups will be able to see and use the configuration in their dashboard.\
  If you do **not** select any groups, the configuration becomes visible and accessible to **everyone** in the company.
* **How it works:** This field is presented as a **multi-choice dropdown** listing all groups available within the company. You may select one or many, depending on how you want to restrict access.
* **Tip:** Use this option to manage access for different teams, such as separating internal testing flows, production workflows, or department-specific configurations (e.g., “Fraud team”, “Support team”, “KYC operations”). Keeping access limited helps avoid accidental changes or unauthorized usage.

***

## Session settings

The **Session Settings** section allows you to customize various aspects of the verification session process, controlling how long sessions last, how they can be accessed, and specific verification rules. Here's an overview of the settings you'll encounter:

### Session lifetime (minutes)

* **Purpose**: Defines the maximum duration (in minutes) that a verification session will remain active. After this time, the session will expire, and the user will need to restart the verification process.
* **Tip**: Specify the session lifetime in minutes based on your security requirements. For example, you might set it to 15 minutes for a quick verification or longer for more detailed processes.

### Schedule session

* **Purpose**: When the **Schedule Session** toggle is enabled, it allows you to schedule a verification session to take place at a specific date and time in the future. This is especially useful for setting up verification flows in advance, giving users the option to book their session for a later time rather than initiating it immediately.
* **Tip**: Enable this toggle if you want users to have the flexibility to book their verification session in advance. User-side booking will be handled on your platform, while the session itself can be scheduled on our platform for a designated date and time. This ensures that verification sessions are managed according to your desired timeline and user convenience.

### **Request additional information**

* **Purpose**: When enabled, allows operators to request further verification from an applicant after a session has already reached a terminal state (approved, rejected, manual check, or expired), without creating a new session. All verification attempts remain stored under the same session, preserving a complete audit trail.
* **Tip**: Enable this setting for workflows where re-verification may be required — for example, when additional documents are needed or a previous submission was incomplete.
* **Default**: Disabled by default. Once enabled, operators will see the **Request more information** button on eligible sessions in Manage.

### Force user to continue on mobile device

* **Purpose**: When enabled, this setting forces the user to complete the verification process on a mobile device. The session will display a **QR code** at the beginning, which the user can scan to continue the verification on their mobile device. This ensures that the entire verification process occurs on mobile, which is essential for processes that require mobile-specific features.
* **Tip**: Enable this toggle if your verification process is designed to be mobile-first or requires mobile-specific features.

### Allow user to continue on another device

* **Purpose**: When enabled, this option allows users to resume their verification process on a different device. This is useful in cases where users start the verification on one device but need to switch to another (e.g., moving from desktop to mobile).
* **Tip**: Enable this toggle to provide flexibility for users who may need to switch devices without losing progress.

### Restrict URL sharing

* **Purpose**: When enabled, this setting prevents users from sharing the session URL with others. It ensures that only authorized users can access the verification flow and adds an extra layer of security.
* **Tip**: Use this option if the verification flow contains sensitive or high-security processes that should not be accessible to unintended users.

### Require FHD camera

* **Purpose**: When enabled, this setting ensures that users complete all **camera-based steps**—such as **liveness checks**, **document capture**, or **selfies**—using a **Full HD (FHD)** camera. This helps maintain high-quality image input, which is crucial for accurate identity verification and fraud detection.
* **Tip**: Enable this option if your process requires **clear, high-resolution visuals** to meet compliance or technical accuracy standards. If the user’s device does not meet the FHD requirement, they may be prompted to switch devices or will not be able to proceed.

### Screening&#x20;

* **Purpose**: Enables or disables screening as part of the verification process. Screening typically involves checking the user’s data against external datasets (e.g., watchlists, sanctions lists) to ensure compliance.
* **Tip**: Enable this toggle if screening is part of your verification process and you want to ensure users are checked against specific datasets.
* **Activation:** Screening is available only in paid plans. If you are on a trial plan, it may not function properly. For full access to screening features, you will need to contact our support team to ensure the right permissions are in place.
* **Minimum screening score**
  * **Purpose**: The Minimum screening score allows you to set a threshold score that the user must meet in order to pass the screening phase. If the user's screening score falls above this threshold, they will be rejected. This feature helps ensure that only users who meet the required compliance standards proceed in the verification process.
  * **Tip**: Set this score based on your risk management strategy or compliance standards. For example, if your compliance policy requires a strong match with screening data, you might set the threshold to **85%** pass rate.
* **Screening datasets**
  * **Purpose**: The Screening datasets option lets you select which external datasets to use during the verification process. These datasets help verify the user's identity by comparing their data against various lists.
  * **Datasets include**:
    * **Default**
    * **UN Sanctions**
    * **Georgian Sanctions**
    * **Adverse Media**
  * **Tip**: Choose the relevant datasets based on your industry, regulatory requirements, or business needs. For example, if your organization operates internationally, you may need to use global sanctions lists, while a local business might focus more on national or regional databases.
* **When to run screening**
  * **Purpose:** Defines **at which stage of the verification flow screening is executed**. This setting controls whether screening applies only to approved sessions or to all completed sessions, including rejected ones.
  * **Options:**
    * **After session approval:** Screening runs **only for sessions that have been approved**.\
      Rejected sessions are not screened.
    * **After session completion:** Screening runs for **all completed sessions**, regardless of whether the session was approved or rejected.
  * **Tip:** Use **After session approval** if you want to minimize screening volume and cost by screening only successful verifications.\
    Use **After session completion** if your compliance policy requires screening all users who reach the end of the verification flow, including rejected cases.

### VPN detection&#x20;

* **Purpose**: Detects whether an applicant is connected via a VPN during their verification session. When enabled, you can define how the session should respond if a VPN connection is identified, allowing you to enforce stricter access controls or flag suspicious activity.
* **Tip:** Enable this toggle if your compliance policy or risk management strategy requires monitoring for VPN usage.

> ⚠️ VPN detection is a paid add-on. Contact our team to enable it for your account.

**If VPN is detected**&#x20;

* **Purpose:** Defines the action taken when a VPN connection is detected during a session. This setting appears when VPN detection is enabled. \
  Options:
  * **Do nothing:** The session continues as normal. VPN usage is noted but does not affect the outcome.
  * **Reject session:** The session is automatically rejected at the end if a VPN was detected.
  * **Flag for manual check:** The session is flagged for manual review at the end, allowing an operator to make the final decision on approval or rejection.
* **Tip:** Choose the action that aligns with your risk tolerance. Use **Reject session** for high-security flows where VPN usage is not acceptable. Use **Flag for manual check** if you prefer human oversight before making a final decision.

***

## Other settings

The **Other Settings** section includes additional configuration options to enhance the verification process. Here’s an overview of the settings you’ll find:

### Return URL

* **Purpose**: The Return URL is a custom URL that users are redirected to after completing the verification process. It can be used to direct users to a specific page or action, such as a confirmation page, dashboard, or any other location relevant to your workflow.
* **Tip**: Define a Return URL to ensure users are redirected seamlessly after the verification process. This is especially useful if you need users to land on a post-verification page (e.g., a success page or next-step instructions).

### Pass custom QR URL&#x20;

* **Purpose**: If you're using the **Force user to continue on mobile device** feature, you can provide a custom **QR URL**. This allows you to pass a unique URL within the QR code that users scan to continue the verification process on their mobile devices.
* **Tip**: Enable this option if you want the QR code to link to a specific URL. This can be used for special workflows or user-specific data.

### Enable SMS notifications&#x20;

* **Purpose**: This option allows you to send **SMS notifications** to users, which can include **One-Time Passwords (OTP)** or other critical updates related to the verification process. SMS notifications are helpful for user authentication, reminders, and alerts.
* **Tip**: Enable **SMS notifications** if your verification process requires real-time communication with users, such as for sending OTPs or session reminders. Make sure to collect user phone numbers as part of the workflow to utilize this feature effectively.

### Recurring face recognition&#x20;

* **Purpose**: Recurring face recognition utilizes a face database to store facial data from users for future verification sessions. This enhances fraud detection by grouping sessions under a **personas** feature, allowing you to track users across multiple verification attempts.
* **Tip**: Enable this feature if you need to track users over time and improve security by detecting repeat users and identifying potential fraud. It is particularly useful for KYC, AML, and other compliance-related processes where recognizing the same user across sessions is crucial.


# KYC steps

Understanding steps for KYC configuration on the second tab of no-code builder

The Configuration steps tab allows you to design and customize your verification workflow by adding, organizing, and configuring different steps. This tab consists of three main sections:

## Overview

1. **Available steps (Left panel)**
   * This section contains all the verification steps that you can include in your workflow.
   * Steps may include Language, ID verification, Liveness check, Selfie with ID, Proof of Address, Video call, User questionnaire, Operator questionnaire, Phone number, Email, Geolocation.
   * **Click the steps** in the left section to add them to your workflow.
2. **Steps builder (Middle panel)**
   * Displays the **current steps** in your verification flow.
   * You can **rearrange** steps by dragging and dropping them to change the execution order.
   * Unwanted steps can be **deleted** if they are no longer needed.
3. **Step settings (Right panel)**
   * When a step is selected, its parameters appear in this panel.
   * You can **adjust parameters** such as retry limits, document type selection.
   * Advanced settings (e.g., step keys) can also be managed here.

## Step settings

The Step settings panel allows you to fine-tune each verification step by adjusting its specific parameters based on your business and compliance needs. When a step is selected, this panel provides configuration options.&#x20;

**Step titles appear in two places:** on the progress indicator shown to users resuming the flow on mobile or desktop, and in the video call operator's frame, where they're used to manually trigger steps.

### **Step titles**

* **Purpose**: Step titles are used for display purposes in various contexts:
  * When a user switches to a mobile device, the desktop screen displays the current step they are on.
  * In a **video call verification**, the operator sees the step titles inside their interface to manually trigger or monitor the verification process.
* **Tip**: Choose clear and descriptive step titles to improve the user experience and help operators navigate the process efficiently.

### Advanced tab

The **Advanced** tab stores all the necessary keys for steps, questions, and answers to facilitate integrations with external systems. These keys can be used for API integrations or other external applications that interact with the verification flow.

**Purpose**

* **Step keys** – Unique identifiers for each verification step.
* **Question keys** – Identifiers for the specific questions in forms or questionnaires.
* **Answer keys** – Corresponding keys for answers provided by users in questionnaire steps.

These keys enable seamless integration with other systems and facilitate tracking and reporting of data.

***

## Steps

### Language

* **Purpose**: The Language step allows users to select their preferred interface language from a dropdown list before proceeding with verification.
* **Positioning**: This step is **always positioned first** in the workflow.
* **Step Parameters**:
  * Define the list of **available languages** that users can choose from.
  * You must select at least **two languages** to enable the dropdown selection.
* **Tip**: If your users primarily speak a specific language, consider setting a **default language** in the general settings, while still offering alternative options for accessibility.

***

### ID verification

**Purpose**: The ID verification step is responsible for verifying a user’s primary identity documents. This step includes multiple configuration options to ensure document authenticity and compliance with verification requirements.

#### **Document type**

Defines which types of identity documents the user can select for verification. Options include:

* ID card
* Passport
* Residence permit
* Driver’s license

#### **Method**

Determines how users can submit their identity document:

* **Capture** – The user must take a live photo of the document.
* **Upload** – The user can upload an existing image of the document.
* **Both** – The user can choose either option.

#### Other parameters

**Compare document fields**

* Compares textual information between the document’s **Visual Zone (VIZ)** and **Machine-Readable Zone (MRZ)**.
* Prevents users from passing verification if the fields do not match.

**Compare document pages**

* Ensures the **front and back pages** belong to the same document.
* If discrepancies are found, the session is **rejected.**

**Block expired documents**

* Rejects users if the expiration date has **already passed**.

**Spoofing detection**

* Detects attempts to use **fake or altered** identity documents and **rejects** such sessions.

**Grayscale detection**

* Identifies if the document is **grayscale** (black & white) and **rejects** it to ensure authenticity.

**Visual damage detection**

* Scans the document for **physical defects**, such as a damaged chip.

**Warn if document expires within (days)**

* Sends a **warning** if the document will expire within the specified number of days.

**Reject if document expires within (days)**

* **Rejects** the session if the document is set to expire within the specified timeframe.

**Block person under age (years)**

* Rejects users **below** the specified age limit.

**Allowed document countries**

* Restricts document verification to **specific countries**.
* Prevents users from verifying if the document is from an unlisted country.

#### Document data review

**Enable document data editing**

* When enabled, a review page is shown to the applicant/operator after document scanning, allowing them to verify and correct OCR-extracted data before proceeding.
* Disabled by default.

**Who can edit**

* Defines which parties are allowed to edit document fields. Options:
  * **User only** – Only the applicant can make corrections.
  * **Operator only** – Only the operator can make corrections in Manage.
  * **Both** – Both the applicant and operator can make corrections.

**Editable fields**

* Defines which document fields are available for correction. For each field you can set:
  * **Mandatory** – Whether the field must be filled before the applicant can proceed.

For the full list of configurable fields and behavior details, see [Document data review ](/platform-concepts/document-data-review)in Platform concepts.

For API-level configuration of this feature, see [Document data review configuration](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification) in the Developer guide.

***

### Liveness check

**Purpose:** The Liveness check step ensures that the user is a real, live person and not a spoofed or manipulated image. During this step, the user positions their face within the designated frame and follows the instructions.

Identomat offers two types of liveness checks:

#### **Liveness type: Active liveness**

* An **advanced biometric check** where the user is prompted to perform specific actions (e.g., blinking, turning their head) to confirm their presence as a real person.
* Designed to prevent **spoofing attempts** using photos, videos, or masks.

#### **Liveness type: Passive liveness**

* A **basic liveness check** where the user simply holds their head within an oval frame.
* The system captures a **two-second video** to analyze and confirm liveness.

#### **Method for passive liveness**

Defines how the liveness check is performed:

* **Capture** – The user must take a live video using their device’s camera.
* **Upload** – The user can upload a selfie.
* **Both** - The user can choose either option.

#### **Maximum attempts for liveness**

* Specifies the **maximum number of attempts** allowed for the user to complete the liveness check.
* If the user exceeds this limit, the session is **rejected**, and they must restart the process.

***

### Selfie with ID&#x20;

**Purpose:** The Selfie with ID step ensures that the user is physically present with their identity document. Users must hold their document in their hands so that both their **face and the document** are clearly visible in the captured image.

#### **Method**

Defines how the user submits their selfie with the document:

* **Capture** – The user must take a live photo using their device’s camera.
* **Upload** – The user can upload an existing image where they are holding their document.
* **Both** – The user can choose either option.

***

### **Proof of Address**&#x20;

**Purpose:** The Proof of Address step verifies a user’s residential address by analyzing official documents that contain their name and address.&#x20;

#### **Document type**

Users can upload one of the following accepted documents as Proof of Address:

* Bank statement
* Utility bill
* Driver’s license
* Vehicle registration certificate&#x20;
* Yellow Slip&#x20;

***

### Video call

**Purpose:**  The Video call step connects the user with an operator for **manual identity verification**. The operator can interact with the user in real-time and initiate other verification steps as needed.

Identomat supports two types of video calls:

* **One-on-one call** – A secure direct video call between a customer and a verification operator.
* **Multi-user call** – Allows **multiple participants** in a single session, where each user follows their own customized verification workflow.

#### **`+ New step` button**

Adds verification steps within the video call process, allowing the operator to trigger them manually.

**Call type**

* **Single participant** – A one-on-one video call.
* **Multiple participants** – A multi-user video call.

**Participant name**

* If enabled, the **user must enter their name** before joining the call.

**Force user's camera on**

* If enabled, the **user cannot turn off their camera** during the call.

**Reset verification**

* If a user **disconnects and rejoins**, all previous verification data is cleared for security reasons, and the operator must restart the process.

***

### User questionnaire

**Purpose:** The User questionnaire step is designed to collect structured user input through various form types. The provided information is securely stored within the verification session. Questionnaire steps offer a wide range of configurable question formats.

#### Questionnaire details

* **Title** – The main title of the questionnaire.
* **Description** – A brief text displayed below the title to provide context.
* **Success button title** – Customizable text for the confirmation button.

#### Questions and answers

Identomat supports a variety of question types, all of which offer customizable parameters:

#### Short answer

Users can type in a response to an open-ended question.

* **Question title** – The label for the question.
* **Answer format** - Defines the expected structure of the user’s response. This setting controls how the input is validated and which type of data the system accepts.
  * **Free text** - Users can enter any text without restrictions.
  * **Email -** Users must enter a valid email address; the system enforces email format validation.
* **Prefilled answer** – A prefilled answer that the user can edit.
* **Required** – Determines whether the question must be answered.
* **Read-only mode** – Prevents users from editing the default answer.
* **Condition** – The question only appears if a specified condition is met.

#### Checkbox (Multiple selection)

Users can select one or more predefined options.

* **Question title** – The label for the question.
* **Default answer** – Pre-checked options that users can modify.
* **Required** – Determines if at least one option must be selected.
* **Read-only mode** – Prevents users from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define multiple selectable choices.

#### Radio (Single selection)

Users can select only one option from a predefined list.

* **Question title** – The label for the question.
* **Default answer** – Preselected option that users can change.
* **Required** – Determines if a selection is mandatory.
* **Read-only mode** – Prevents users from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define the available choices.

#### **File upload**

Users can upload files, such as images or PDFs.

* **Question title** – The label for the question.
* **Description** – Additional instructions displayed under the title.
* **Maximum number of files** – Limit the number of files users can upload (max: 10).
* **File types** – Restrict uploads to **PDFs**, **images**, or both.
* **Required** – Determines if file upload is mandatory.
* **Condition** – The question only appears if a specified condition is met.

#### **Dropdown**

Allows users to select one or multiple values from a predefined dropdown list.

* **Question title** – The label for the question.
* **Dropdown options** – Define the dropdown list by providing options in a comma-separated format (e.g., *Option 1, Option 2, Option 3*).
* **Multi-select** – If enabled, users can select multiple options from the dropdown list. If disabled, users can select only one option.
* **Required** – Determines if a selection is mandatory.
* **Error message** – The message displayed if the field is required but no selection is made.
* **Condition** – The question only appears if a specified condition is met.

#### **Attachment**

Allows users to access files that are either uploaded by operators during the session or pre-attached by administrators via the no-code builder or API.

* **Title** – The label for the question.
* **Description** – Additional instructions displayed under the title.
* **File attachment mode (Radio)** – Define how files are provided to the user:
  * **Uploaded by operator per session** – Operators can upload files during the session that are visible to the user.
    * **Allow changes to attachments after user confirmation -** If toggle is **turned off,** the operator cannot edit attachments after the user **confirms** the questionnaire. If **enabled**, the operator may still upload or remove files.
  * **Pre-attached file** – Files uploaded in advance via the no-code configurations or API.
* **Maximum number of files** – Limit the number of files users can upload (max: 10).
* **File types (Checkbox)** – Restrict uploads to **PDFs**, **images**, or both.
* **Condition** – The attachment field only appears if a specified condition is met.

***

### Operator questionnaire&#x20;

The operator questionnaire appears in the session, and the operator can fill out the form during or after the session.

#### Questionnaire details

* **Title** – The main title of the questionnaire.
* **Description** – A brief text displayed below the title to provide context.

#### Questions and answers

Identomat supports **five types of questions**, each with customizable parameters:

#### Short answer

Operators can type in a response to an open-ended question.

* **Question title** – The label for the question.
* **Answer format** - Defines the expected structure of the operator's response. This setting controls how the input is validated and which type of data the system accepts.
  * **Free text** - Operators can enter any text without restrictions.
  * **Email -** Operators must enter a valid email address; the system enforces email format validation.
* **Prefilled answer** – A prefilled answer that the operator can edit.
* **Required** – Determines whether the question must be answered.
* **Read-only mode** – Prevents operators from editing the default answer.
* **Condition** – The question only appears if a specified condition is met.

#### Checkbox (Multiple selection)

Operators can select one or more predefined options.

* **Question title** – The label for the question.
* **Default answer** – Pre-checked options that operators can modify.
* **Required** – Determines if at least one option must be selected.
* **Read-only mode** – Prevents operators from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define multiple selectable choices.

#### Radio (Single selection)

Operators can select only one option from a predefined list.

* **Question title** – The label for the question.
* **Default answer** – Preselected option that operators can change.
* **Required** – Determines if a selection is mandatory.
* **Read-only mode** – Prevents operators from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define the available choices.

#### **File upload**

Operators can upload files, such as images or PDFs, directly into the session while filling out the questionnaire. These files become part of the session record and can later be reviewed by administrators or other authorized roles.

* **Question title** – The label for the upload field.
* **Description** – Additional instructions displayed under the title.
* **Maximum number of files** – Limit the number of files operators can upload (max: 10).
* **File types** – Restrict uploads to **PDFs**, **images**, or both.
* **Required** – Determines if file upload is mandatory for the operator before submitting the questionnaire.
* **Condition** – The upload field only appears if a specified condition is met.

#### **Dropdown**

Allows operators to select one or multiple values from a predefined dropdown list while filling out the session questionnaire.

* **Question title** – The label for the dropdown field.
* **Dropdown options** – Define the list of options by providing values in a comma-separated format (e.g., *Option 1, Option 2, Option 3*).
* **Multi-select** – If enabled, operators can select multiple options. If disabled, only one option can be selected.
* **Required** – Determines if a selection is mandatory before submitting the questionnaire.
* **Condition** – The dropdown field only appears if a specified condition is met.

***

### Phone number

Purpose: The Phone number step allows for the collection or verification of a user’s phone number. The provided phone number is stored within the session.

**Method**

* **Collect** – The user enters their phone number, and it is stored in the session without verification.
* **Verify** – The user enters their phone number, and an **OTP (One-Time Password)** is sent. The phone number is stored only after the OTP is successfully verified.

***

### Email

**Purpose:** The Email step allows for the collection or verification of a user’s email address. The provided email is stored within the session.

**Method**

* **Collect** – The user enters their email address, and it is stored in the session without verification.
* **Verify** – The user enters their email address, and a **confirmation code** is sent. The email is stored only after the verification code is successfully confirmed.

***

### Geolocation

**Purpose:** The Geolocation step collects and verifies the user’s physical location during the verification process. This helps ensure compliance with jurisdiction, AML, or KYC requirements.

***

### **SSN verification**

**Purpose:** The SSN verification step verifies a user's **Social Security Number** as part of the identification process.

***

### AnyDoc reader

**Purpose:** The AnyDoc step lets you **extract structured data from any document type** using AI - such as payslips, bank statements, utility bills, or tax certificates. You define the fields you want extracted, and the system reads, validates, and flags the data automatically. Unlike Proof of Address, which supports a fixed set of predefined document types, AnyDoc is fully configurable per document, making it suitable for client-specific or non-standard document types.

#### **Step parameters**

**Document type**

* Free-text label identifying the document being requested (e.g. "Payslip", "Bank Statement", "Tax Declaration").
* Displayed across session details and API output.
* **Required.**

**Allowed formats**

* Restricts uploads to **PDF**, **Image**, or both.
* At least one must be selected.

**Page configuration**

* Defines whether the document is expected to be **single page** or **multiple pages**.
* If **Multiple pages** is selected, you may optionally specify the exact number of pages expected. If left blank, all uploaded pages are processed regardless of length. Maximum number of pages defaults to **10.**

**Extraction hint**

* Optional free-text context about the document as a whole, given to the AI to improve extraction accuracy (e.g. layout quirks, formatting conventions).
* Recommended to write in English for best accuracy, regardless of the document's actual language.

**Document validity check**

* When enabled, rejects or flags documents older than a configured age, based on a date extracted from the document.
* Requires selecting a **Date field** (must be a field of type Date, configured below) and a **Maximum document age** (a number plus a unit: Days, Weeks, Months, or Years).

**Document language**

* Optional. Specifies the expected language of the document to guide extraction.
* If left blank, the language is detected automatically.
* Used only to inform the AI - never shown to the end user.

**Confidence threshold**

* A score from 0–100 below which an extracted field is flagged for manual review.
* Applies to all fields by default (80), but can be overridden per field.

**Retry limit**

* Maximum number of times a user can re-upload or recapture a document in this step.
* Each attempt uses one AI processing credit, so this is configurable per step to control usage.

#### **Field configuration**

Each document type can have one or more fields defined for extraction. For every field, you can configure:

**Field type**

* Determines how the extracted value is validated and formatted.
* Options: Text, Number, Date, Yes/No, Email, Phone number, Currency, Money/Amount, Tax ID/Registration number, Address, Percentage, Other.
* If **Other** is selected, you can optionally specify what kind of data the field contains — if left blank, it's treated as free text with no specific validation.

**Field label**

* The name of the field, used to help the AI identify it in the document and shown during review.
* Optional if an Extraction hint is provided instead.

**Alternative names**

* Optional comma-separated list of other terms this field may appear as in the document (e.g. "Sex, Male/Female" for a Gender field).
* Used only to improve extraction accuracy - not shown anywhere in review or output.

**Field key**

* A unique identifier used to reference this field in API output.
* Required, and must be unique within the step.

**Extraction hint**

* Optional guidance telling the AI how to find and interpret this specific field.
* Recommended to write in English for best accuracy, regardless of the document's language.
* At least one of Field label or Extraction hint must be provided per field.

**Confidence threshold override**

* Optional. Overrides the step-level confidence threshold for this specific field only.

**Required**

* Toggle. If enabled, the session is flagged when this field cannot be extracted from the document.

***


# KYB steps

Understanding steps for KYB configuration on the second tab of no-code builder

The KYB configuration steps tab allows you to design and customize your KYB workflow by adding, organizing, and configuring different steps. This tab consists of three main sections:

## Overview

* **Available steps (Left panel)**
  * This section contains all the verification steps that you can include in your workflow.
  * Steps may include Language, User questionnaire, Company data and Beneficiaries.
  * **Click the steps** in the left section to configure the KYB process.

2. **Steps builder (Middle panel)**
   * Displays the **current steps** in your verification flow.
   * You can **rearrange** steps by dragging and dropping them to change the execution order.
   * Unwanted steps can be **deleted** if they are no longer needed.
3. **Step settings (Right panel)**
   * When a step is selected, its parameters appear in this panel.
   * You can **adjust parameters** such as company data fields selection.
   * Advanced settings (e.g., step keys) can also be managed here.

## Step settings

The Step settings panel allows you to fine-tune each step by adjusting its specific parameters based on your business and compliance needs. When a step is selected, this panel provides configuration options.&#x20;

**Step titles appear in two places:** on the progress indicator shown to users resuming the flow on mobile or desktop, and in the video call operator's frame, where they're used to manually trigger steps.

### **Step titles**

* **Purpose**: Step titles are used for display purposes in various contexts:
  * Displayed as main title on the user's side.
  * When a user switches to a mobile device, the desktop screen displays the current step they are on.
* **Tip**: Choose clear and descriptive step titles to improve the user experience and help operators navigate the process efficiently.

### Advanced tab

The **Advanced** tab stores all the necessary keys for steps, questions, and answers to facilitate integrations with external systems. These keys can be used for API integrations or other external applications that interact with the verification flow.

**Purpose**

* **Step keys** – Unique identifiers for each verification step.
* **Question keys** – Identifiers for the specific questions in forms or questionnaires.
* **Answer keys** – Corresponding keys for answers provided by users in questionnaire steps.

These keys enable seamless integration with other systems and facilitate tracking and reporting of data.

***

## Steps

### Language

* **Purpose**: The Language step allows users to select their preferred interface language from a dropdown list before proceeding with verification.
* **Positioning**: This step is **always positioned first** in the workflow.
* **Step parameters**:
  * Define the list of **available languages** that users can choose from.
  * You must select at least **two languages** to enable the dropdown selection.
* **Tip**: If your users primarily speak a specific language, consider setting a **default language** in the general settings, while still offering alternative options for accessibility.

***

### User questionnaire

**Purpose:** The User questionnaire step is designed to collect structured user input through various form types. The provided information is securely stored within the verification session. Questionnaire steps offer a wide range of configurable question formats.

#### Questionnaire details

* **Title** – The main title of the questionnaire.
* **Description** – A brief text displayed below the title to provide context.
* **Success button title** – Customizable text for the confirmation button.

#### Questions and answers

Identomat supports a variety of question types, all of which offer customizable parameters:

#### Short answer

Users can type in a response to an open-ended question.

* **Question title** – The label for the question.
* **Answer format** - Defines the expected structure of the user’s response. This setting controls how the input is validated and which type of data the system accepts.
  * **Free text** - Users can enter any text without restrictions.
  * **Email -** Users must enter a valid email address; the system enforces email format validation.
* **Prefilled answer** – A prefilled answer that the user can edit.
* **Required** – Determines whether the question must be answered.
* **Read-only mode** – Prevents users from editing the default answer.
* **Condition** – The question only appears if a specified condition is met.

#### Checkbox (Multiple selection)

Users can select one or more predefined options.

* **Question title** – The label for the question.
* **Default answer** – Pre-checked options that users can modify.
* **Required** – Determines if at least one option must be selected.
* **Read-only mode** – Prevents users from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define multiple selectable choices.

#### Radio (Single selection)

Users can select only one option from a predefined list.

* **Question title** – The label for the question.
* **Default answer** – Preselected option that users can change.
* **Required** – Determines if a selection is mandatory.
* **Read-only mode** – Prevents users from modifying selections.
* **Condition** – The question only appears if a specified condition is met.
* **`+ Add option`** – Define the available choices.

#### **File upload**

Users can upload files, such as images or PDFs.

* **Question title** – The label for the question.
* **Description** – Additional instructions displayed under the title.
* **Maximum number of files** – Limit the number of files users can upload (max: 10).
* **File types** – Restrict uploads to **PDFs**, **images**, or both.
* **Required** – Determines if file upload is mandatory.
* **Condition** – The question only appears if a specified condition is met.

#### **Dropdown**

Allows users to select one or multiple values from a predefined dropdown list.

* **Question title** – The label for the question.
* **Dropdown options** – Define the dropdown list by providing options in a comma-separated format (e.g., *Option 1, Option 2, Option 3*).
* **Multi-select** – If enabled, users can select multiple options from the dropdown list. If disabled, users can select only one option.
* **Required** – Determines if a selection is mandatory.
* **Error message** – The message displayed if the field is required but no selection is made.
* **Condition** – The question only appears if a specified condition is met.

#### **Attachment**

Allows users to access files that are either uploaded by operators during the session or pre-attached by administrators via the no-code builder or API.

* **Title** – The label for the question.
* **Description** – Additional instructions displayed under the title.
* **File attachment mode (Radio)** – Define how files are provided to the user:
  * **Uploaded by operator per session** – Operators can upload files during the session that are visible to the user.
    * **Allow changes to attachments after user confirmation -** If toggle is **turned off,** the operator cannot edit attachments after the user **confirms** the questionnaire. If **enabled**, the operator may still upload or remove files.
  * **Pre-attached file** – Files uploaded in advance via the no-code configurations or API.
* **Maximum number of files** – Limit the number of files users can upload (max: 10).
* **File types (Checkbox)** – Restrict uploads to **PDFs**, **images**, or both.
* **Condition** – The attachment field only appears if a specified condition is met.

***

### Company data

**Purpose:** The Company Data step collects essential information about a legal entity during KYB verification. This information is required to validate the company’s identity and ensure compliance with regulatory requirements.

**Tip:** Always include the mandatory fields required for legal compliance. Use optional fields to gather extra information useful for business or regulatory purposes.

#### **Step fields**

* **Company name** – Mandatory; cannot be deleted.
* **Registration number** – Mandatory; cannot be deleted.
* **Registration country** – Mandatory; cannot be deleted.

#### **Add field button**

Allows administrators to include additional company information in the verification flow. The available fields include:

* **VAT/Tax ID**
* **Date of incorporation**
* **Email**
* **Phone number**
* **Website**
* **Legal address**
* **Company entity type**

Each added field includes a toggle to mark it as **required** or optional.

***

### Beneficiaries

**Purpose:** The Beneficiaries step collects detailed information about a company’s key individuals and legal entities, such as shareholders, UBOs, directors, and representatives. This ensures compliance with regulatory requirements and enables verification workflows for both individuals and legal entities.

**Tip:** Always configure the verification toggles and KYC/KYB dropdowns according to your compliance requirements. Mandatory fields cannot be removed, but optional fields can be added to capture additional information that may be useful for your internal processes or reporting.

#### **Step details**

* **Title** – The main label for the step.
* **Description** – A brief explanation of the purpose of this step.
* **Beneficiary verification** – Select how beneficiaries should be verified:
  * **Individuals** – Follow a **KYC flow**.
  * **Legal entities** – Follow a **KYB flow** using the chosen configuration.
* **KYC dropdown** – Select a **KYC configuration** to use for individual verification.
* **KYB dropdown** – Select a **KYB configuration** to use for company verification.
* <mark style="color:$primary;">**`+ Add beneficiary`**</mark>**&#x20;button** – Adds a new beneficiary entry to the step.

#### **Available roles:**

**Shareholders**

* **Verification toggle** – Activates when a KYC or KYB configuration is selected in the dropdown.
* **Tabs:** Individual and Company

**Individual fields** (mandatory, cannot be deleted)

* First name
* Last name
* Date of birth

**Add field button** – Additional optional fields:

* Beneficial ownership percentage
* Phone number
* Email

Each added field can be marked as **required** or optional.

**Company fields** (mandatory, cannot be deleted)

* Company name
* Registration number
* Registration country

**Add field button** – Additional optional fields:

* Beneficial ownership percentage
* Website
* VAT/Tax ID
* Date of incorporation
* Email
* Phone number
* Legal address

Each added field can be marked as **required** or optional.

#### **UBOs (Ultimate Beneficial Owners)**

* **Verification toggle** – Activates when a KYC configuration is selected.

**Fields** (mandatory, cannot be deleted)

* First name
* Last name
* Date of birth

**Add field button** – Additional optional fields:

* Beneficial ownership percentage
* Phone number
* Email

Each added field can be marked as **required** or optional.

#### **Directors**

* **Verification toggle** – Activates when a KYC configuration is selected.

**Fields** (mandatory, cannot be deleted)

* First name
* Last name
* Date of birth

**Add field button** – Additional optional fields:

* Phone number
* Email

Each added field can be marked as **required** or optional.

#### **Representatives**

* **Verification toggle** – Activates when a KYC configuration is selected.

**Fields** (mandatory, cannot be deleted)

* First name
* Last name
* Date of birth

**Add field button** – Additional optional fields:

* Phone number
* Email

Each added field can be marked as **required** or optional.

#### **Other**

* **Verification toggle** – Activates when a KYC configuration is selected.

**Fields** (mandatory, cannot be deleted)

* Position
* First name
* Last name
* Date of birth

**Add field button** – Additional optional fields:

* Phone number
* Email

Each added field can be marked as **required** or optional.

***


# Developer guide

The Developer Guide provides comprehensive instructions and best practices for integrating with our platform.

[Identomat](https://www.identomat.com/) is a service designed to verify **human identity** and **liveness** over the Internet. This guide assumes that the integrating organization (hereafter referred to as *"the company"*) operates a web server (referred to as *"the company server"*) at `example.com` .

### Prerequisites

Before integrating, the company must obtain a `company_key` — a credential used to securely communicate between the company server and the Identomat server (`widget.identomat.com`).

{% hint style="info" %}
Don't have a `company_key` yet? See [**API access**](/get-started/api-access) for how to generate one from your Identomat dashboard.
{% endhint %}

**Optional security features, configurable at key generation or any time after:**

* **HMAC authorization** — A `secret_key` is used to generate and validate HMAC signatures, adding an extra layer of verification to requests sent with your `company_key`.
* **IP whitelisting** — Restrict a `company_key` to a specific set of IP addresses. Once IPs are added, only requests carrying that key from a whitelisted address are accepted; requests from any other IP are rejected. Leaving the list empty allows the key to be used from any IP. Both settings can be added, edited, or removed at any time from the same section of your dashboard where the key was generated.

For enhanced security, companies can optionally implement **HMAC authorization**. In this case, a `secret_key` is used to generate and validate HMAC signatures for secure communication.

## Procedure

The integration procedure consists of three main steps:

{% stepper %}
{% step %}
[**Acquiring a `session_token`.**](#acquiring-a-session-token)
{% endstep %}

{% step %}
[**Redirecting the user's browser to `widget.identomat.com`.**](#redirecting-to-the-identomat-widget)
{% endstep %}

{% step %}
[**Checking for a result.**](#checking-for-a-result)
{% endstep %}
{% endstepper %}

### **Acquiring a session token**

To acquire a `session_token`, your backend must send a request to the `/begin/` endpoint with the following parameters:

* `company_key` – Your unique company identifier.
* `flags` – A JSON object defining global settings for the verification session.
* `steps` – An array specifying the steps to include in the verification flow. Each step can have its own step-specific flags.

> ⚠️ The `session_token` is valid for **15 minutes** by default.

**Endpoint:**

```nginx
POST https://widget.identomat.com/begin/
```

Requests can be sent as:

* **URL query parameters**
* **URL-encoded form data**
* **JSON object** in the request body (recommended)

#### **Steps and Flags Structure**

* &#x20;`flags` : Defines global behavior for the entire session.
* `steps` :  Allows full control of the verification process, enabling you to specify **which steps to include** (e.g., `liveness`, `identity-document`) and configure **step-specific flags**, such as `"allow_face_upload": true` for the `liveness` step.

{% hint style="info" %}
To ensure compatibility between the old and new methods, both of which need to work together, you should use the `'skip_face'` and `'skip_document'` flags when using steps.

These flags prevent the 'identity-document' and 'liveness' steps from being duplicated if they already exist in the flow.
{% endhint %}

**Using Configuration or custom steps**

You can initiate a session in two ways:

* **Via predefined configuration (Recommended):**
  * We strongly recommend using **predefined configurations** via the `config_id` parameter. Configurations ensure consistency, simplify integration, and reduce the risk of errors. Using configurations also allows us to deprecate legacy custom step handling in the future, helping clients maintain a clean and stable integration.
* **Via custom steps and flags**:\
  Only use custom steps and flags if you have very specific needs that cannot be satisfied with configurations. Over time, we encourage migrating all custom flows to configurations.

{% hint style="warning" %}
**Why configurations matter:**

* **Simplifies session creation** — no need to manually define steps and flags.
* **Reduces risk of errors** in the verification flow.
* **Future-proof** — legacy custom step handling will eventually be deprecated.
* Enables Identomat to **maintain**, **improve**, and **optimize** **flows** efficiently.
* Makes **integration** easier.
  {% endhint %}

{% hint style="info" %}
📘 For detailed parameter definitions and examples, refer to the [**API Reference.**](/developer-tools/api-reference#begin-session-creation)
{% endhint %}

### Redirecting to the Identomat Widget

To start a verification session, the company server must redirect the user’s browser to:

```
https://widget.identomat.com/?session_token={session_token_here}
```

Replace `{session_token_here}` with the actual token received from the `/begin/` endpoint.

### Embedding in an Iframe

Alternatively, the widget can be embedded within an iframe:

```html
<iframe
    height=“100dvh”
    width=“100%”
    src="https://widget.identomat.com/?session_token={session_token_here}"
    allow="camera">
</iframe>
```

{% hint style="warning" %}
The `allow="camera"` attribute is required to grant camera access. Without it, verification steps that rely on the camera will not function.
{% endhint %}

### **Checking for a result**

Once the verification process is completed, the result can be detected in two ways depending on how the widget was integrated:

* **If** **redirected**\
  If you used a redirect approach (not embedded in an iframe), the user will be redirected to the `return_url` specified in the configuration or session flags, with the `session_token` appended as a query parameter.

```
https://yourapp.com/?session_token=abc123xyz
```

* **If embedded in an iframe**, the process completion can be detected using JavaScript:

```javascript
addEventListener('message', function (e) {
    if (e.origin !== 'https://widget.identomat.com') return;
    if (e.data !== 'DONE') return;
    // Process completed, handle results here
});
```

{% hint style="success" %}
Ensure you verify the message `origin` to avoid security risks.
{% endhint %}

***

## Quick links

Access detailed developer guides for **KYC (Know Your Customer)** and **KYB (Know Your Business)** flows. Click a card below to explore configuration, integration steps, and best practices for each verification type.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>KYC (Know Your Customer)</strong><br><br>Learn how to collect and verify individual user data, configure verification steps, and integrate KYC flows.</td><td><a href="/pages/zp3PlfI2jqthOVkWQNJW">/pages/zp3PlfI2jqthOVkWQNJW</a></td></tr><tr><td><p><strong>KYB (Know Your Business)</strong></p><p><br>Learn how to collect and verify company data, beneficiaries, and representatives, with configurable verification steps.</p></td><td><a href="/pages/PcRaMELPuaahtgUUMEyI">/pages/PcRaMELPuaahtgUUMEyI</a></td></tr></tbody></table>


# KYC (Know Your Customer)

The KYC flow verifies the identity of individual users through document checks, liveness detection, and automated data validation.

Each KYC verification flow consists of configurable steps that define how the end user’s identity is verified. The flags and steps listed below determine which checks are included in the process and how they are executed.

## Flags

The `flags` parameter is an object with optional configuration flags that adjust the KYC verification flow. Below is a summary of the most commonly used flags:

<table data-full-width="true"><thead><tr><th width="218">Flag name</th><th width="437">Description</th><th width="216">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>skip_face</code></td><td>Skips the <code>liveness</code> step if it already exists in the defined steps. Prevents duplication when using custom flows.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>skip_document</code></td><td>Skips the <code>identity-document</code> step if it already exists in the defined steps. Prevents duplication when using custom flows.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>return_url</code></td><td>URL to redirect the user to after the identification process is completed. If omitted, the session is assumed to be embedded in an iframe.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>language</code></td><td><p>User interface language code. Supported values:</p><pre data-overflow="wrap"><code>"es", "ka", "uk", "ru", "uz", "it", "gr", "tr", "ro", "ar", "de", "pl", "hi", "bn", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre><p></p></td><td><code>"en"</code></td><td>&#x3C;string></td></tr><tr><td><code>skip_desktop</code></td><td>Limits sessions to mobile devices only. If initiated on desktop, a QR code is shown to transfer the session to a mobile device.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>switch_device_url</code></td><td>A custom URL to display in the QR code when the camera is unavailable or blocked. If omitted or empty, the QR code will not be displayed.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>restrict_url_sharing</code></td><td>Prevents the session URL from being used on a different browser or device. <br>If <code>true</code>, the QR code will not appear when camera access is denied—unless <code>switch_device_url</code> is also defined.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>requiredHdMedia</code></td><td>Enforces Full HD (1080p+) camera usage for <code>liveness</code> and <code>identity-document</code> steps. If not met, a QR code is shown for the user to switch to another device.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

## Steps

The `steps` array defines the sequence and structure of the identification process. It is included alongside the `company_key` and `flags` parameters when creating a session.

Each step in the `steps` array can contain the following properties:

<table><thead><tr><th width="163.91015625">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>type</code></td><td>The type of the specific step (see list of supported step types below).</td></tr><tr><td><code>key</code></td><td>A unique identifier for the step. This key can be customized but must remain unique within the session.</td></tr><tr><td><code>flags</code></td><td>Step-specific configuration flags that control the behavior of this step.</td></tr><tr><td><code>title</code></td><td>A custom title provided by the client, displayed to the user during this step in the interface.</td></tr></tbody></table>

### **Supported step types**

Below is a list of all step types currently supported in the system:

* [Language](#language)
* [ID verification](#identity-document-verification)
* [Liveness check](#liveness-check)
* [Proof of Address](#proof-of-address)
* [Selfie with ID](#selfie-with-id)
* [Video call](#video-call)
* [Phone number verification](#phone-number)
* [Email verification](#email)
* [Geolocation](#geolocation)
* [AnyDoc reader](#anydoc-reader) <i class="fa-burst-new" style="color:$success;">:burst-new:</i>
* [SSN verification](#ssn-verification)
* [User questionnaire](#user-questionnaire)
* [Operator questionnaire](#operator-questionnaire)

***

### Language

The **Language** step allows the user to select their preferred interface language at the beginning of the identification process.

**Language step configurations:**

* **Title:** `Language`
* **Type**: `language`
* **Key**: `language`
* **Array** of `languages`&#x20;

<table data-full-width="true"><thead><tr><th width="259">Flag</th><th width="441.3984375">Description</th><th width="98.85546875">Default</th><th width="131.734375">Type</th></tr></thead><tbody><tr><td><code>languages</code></td><td><p>An array of language codes to display. If left empty, all supported languages will be shown.</p><pre data-overflow="wrap"><code>"en", "ka", "es", "uk", "gr", "it", "de", "ru", "uz", "ro", "tr", "ar", "pl", "bn", "hi", "hy", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td>All</td><td>Array&#x3C;string></td></tr></tbody></table>

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
                "title": {
                  "en": "Language",
                  "ka": "ენა",
                  "es": "Idioma",
                  "uk": "Мова",
                  "gr": "Γλώσσα",
                  "it": "Lingua",
                  "de": "Sprache",
                  "ru": "Язык",
                  "uz": "Til",
                  "ro": "Limbă",
                  "tr": "Dil",
                  "ar": "اللغة",
                  "pl": "Język",
                  "bn": "ভাষা",
                  "hi": "भाषा",
                  "hy": "Լեզու",
                  "az": "Dil",
                  "ja": "言語",
                  "pt": "Idioma",
                  "fr": "Langue",
                  "kk": "Тіл",
                  "sv": "Språk"
                },
                "type": "language",
                "key": "language",
                "languages": [
                    "en",
                    "ka",
                    "es",
                    "uk",
                    "gr",
                    "it",
                    "de",
                    "ru",
                    "uz",
                    "ro",
                    "tr",
                    "ar",
                    "pl",
                    "bn",
                    "hi",
                    "hy",
                    "az",
                    "ja",
                    "pt",
                    "fr",
                    "kk",
                    "sv"
                ]
            },
            {
                "title": {
                  "en": "ID verification",
                  "ka": "პირადობის დადასტურება",
                  "es": "Verificación de identidad",
                  "uk": "Підтвердження особи",
                  "gr": "Επαλήθευση ταυτότητας",
                  "it": "Verifica dell identità",
                  "de": "Identitätsprüfung",
                  "ru": "Проверка удостоверения личности",
                  "uz": "Shaxsni tasdiqlash",
                  "ro": "Verificare a identității",
                  "tr": "Kimlik doğrulama",
                  "ar": "التحقق من الهوية",
                  "pl": "Weryfikacja tożsamości",
                  "bn": "পরিচয় যাচাই",
                  "hi": "पहचान सत्यापन",
                  "hy": "Անձնագրի հաստատում",
                  "az": "Şəxsiyyətin təsdiqi",
                  "ja": "本人確認",
                  "pt": "Verificação de identidade",
                  "fr": "Vérification d identité",
                  "kk": "Жеке басын тексеру",
                  "sv": "ID-verifiering"
            },
                "type": "identity-document",
                "key": "select_document_id-1",
                "flags": {
                    "document_types": [
                        "id",
                        "passport",
                        "driver_license",
                        "residence_license"
                    ],
                    "allow_document_upload": false,
                    "disable_document_capture": false
                }
            }
    ]
}'
```

</details>

***

### Identity document verification

The Identity Document step involves users scanning or uploading photos of their ID documents.

**Identity document step configurations:**

* **Title:** `ID verification`
* **Type**: `identity-document`
* **Key**: `identity-document`
* **Flags:**&#x20;
  * disable\_document\_capture&#x20;
  * allow\_document\_upload&#x20;
  * document\_types&#x20;
  * document\_countries

<table data-full-width="true"><thead><tr><th width="234.47265625">Flag</th><th width="448">Description</th><th width="119.3828125">Default</th><th width="149.3515625">Type</th></tr></thead><tbody><tr><td><code>disable_document_capture</code></td><td>Disables live document scanning. Users can only upload images of their documents.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_document_upload</code></td><td>Enables the option to either scan or upload the document.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_nfc_capture</code><br><br></td><td>Enables NFC chip reading for supported identity documents (e.g. biometric passports and IDs).<br>When enabled, users can scan the document’s NFC chip using a compatible device.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>document_types</code></td><td><p>A list of allowed document types.<br></p><p>Possible values:</p><pre data-overflow="wrap"><code>"id", "passport", "driver_license", "residence_license"
</code></pre></td><td>All types</td><td>Array&#x3C;string></td></tr><tr><td><code>document_countries</code></td><td>Restricts accepted document issuers to specific country codes. (e.g., <code>"USA", "DEU", "ITA"</code>)</td><td>Unrestricted</td><td>Array&#x3C;string></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Allows users to optionally switch to another device to continue the session.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with  **`return_url`** & **`language`** flags and an **`identity-document`** verification step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
            "title": {
                "es": "ID verification"
            },
            "type": "identity-document",
            "key": "select_document_id",
            "flags": {
                "allow_document_upload": true,
                "document_types": [
                    "id",
                    "passport",
                    "driver_license",
                    "residence_license"
                ]
            }
        }
    ]
}'
```

</details>

#### **Document data review**&#x20;

When enabled, users are presented with a review page after document scanning, where they can verify and correct the extracted data before submission.

To enable Document data review, add a `review` object to the step configuration:

<table><thead><tr><th width="139.65234375">Flag</th><th width="352.6171875">Description</th><th width="119.2421875">Default</th><th width="158.55078125">Type</th></tr></thead><tbody><tr><td><code>check</code></td><td>Enables the Document data review page.</td><td><code>false</code></td><td><code>&#x3C;boolean></code></td></tr><tr><td><code>allowedUsers</code></td><td>Defines who can edit the extracted data on the review page. <br>Possible values: <code>"client"</code> (the end user completing the verification), <code>"operator"</code> (operator supervising the session).</td><td>—</td><td><code>Array&#x3C;string></code></td></tr><tr><td><code>fields</code></td><td>A map of OCR fields to include in the review page. Each field can be configured with <code>editable</code> and <code>mandatory</code> properties.</td><td>—</td><td><code>Object</code></td></tr></tbody></table>

**Field configuration properties:**

<table><thead><tr><th width="120.27734375">Flag</th><th width="461.484375">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>type</code></td><td>Data type of the field. Possible values: <code>"string"</code>, <code>"datestring"</code></td><td><code>&#x3C;string></code></td></tr><tr><td><code>editable</code></td><td>Whether the user or operator can edit this field.</td><td><code>&#x3C;boolean></code></td></tr><tr><td><code>mandatory</code></td><td>Whether the field must be filled before submission.</td><td><code>&#x3C;boolean></code></td></tr></tbody></table>

**Configurable fields:**

| Field                  | Key                    | Component        |
| ---------------------- | ---------------------- | ---------------- |
| First Name (Eng.)      | `firstNameEn`          | Text input       |
| First Name (Local)     | `firstNameLocal`       | Text input       |
| Middle Name (Eng.)     | `middleNameEn`         | Text input       |
| Middle Name (Local)    | `middleNameLocal`      | Text input       |
| Last Name (Eng.)       | `lastNameEn`           | Text input       |
| Last Name (Local)      | `lastNameLocal`        | Text input       |
| Father's Name (Eng.)   | `fatherNameEn`         | Text input       |
| Father's Name (Local)  | `fatherNameLocal`      | Text input       |
| Date of Birth          | `dateOfBirth`          | Date picker      |
| Place of Birth         | `placeOfBirth`         | Text input       |
| Sex                    | `sex`                  | Radio button     |
| Citizenship            | `citizenship`          | Country dropdown |
| Nationality            | `nationality`          | Country dropdown |
| Document Number        | `documentNumber`       | Text input       |
| Authority              | `authority`            | Text input       |
| Document Expires On    | `documentExpireDate`   | Date picker      |
| Document Issuing Date  | `documentIssuingDate`  | Date picker      |
| Document Issuing State | `documentIssuingState` | Country dropdown |
| Personal Number        | `personalNumber`       | Text input       |
| Address                | `address`              | Textarea         |
| State                  | `state`                | Text input       |

**Source trust hierarchy**

Fields populated from a trusted source are permanently **read-only**, regardless of the `editable` configuration. This rule is enforced at the backend level and cannot be overridden.

The following sources produce non-editable fields:

* `NFC`
* `MRZ`
* `QR`

**Example configuration:**

<details>

<summary><em>Expand to view example</em></summary>

```bash
{
  "type": "identity-document",
  "key": "select_document_id",
  "title": { "en": "ID verification" },
  "flags": {
    "document_types": ["id", "passport", "driver_license", "residence_license"],
    "allow_document_upload": true,
    "disable_document_capture": false
  },
  "review": {
    "check": true,
    "allowedUsers": ["client", "operator"],
    "fields": {
      "firstNameEn":          { "type": "string",     "editable": true, "mandatory": true },
      "firstNameLocal":       { "type": "string",     "editable": true, "mandatory": true },
      "middleNameEn":         { "type": "string",     "editable": true, "mandatory": true },
      "middleNameLocal":      { "type": "string",     "editable": true, "mandatory": true },
      "lastNameEn":           { "type": "string",     "editable": true, "mandatory": true },
      "lastNameLocal":        { "type": "string",     "editable": true, "mandatory": true },
      "fatherNameEn":         { "type": "string",     "editable": true, "mandatory": true },
      "fatherNameLocal":      { "type": "string",     "editable": true, "mandatory": true },
      "dateOfBirth":          { "type": "datestring", "editable": true, "mandatory": true },
      "placeOfBirth":         { "type": "string",     "editable": true, "mandatory": true },
      "sex":                  { "type": "string",     "editable": true, "mandatory": true },
      "citizenship":          { "type": "string",     "editable": true, "mandatory": true },
      "nationality":          { "type": "string",     "editable": true, "mandatory": true },
      "documentNumber":       { "type": "string",     "editable": true, "mandatory": true },
      "authority":            { "type": "string",     "editable": true, "mandatory": true },
      "documentExpireDate":   { "type": "datestring", "editable": true, "mandatory": true },
      "documentIssuingDate":  { "type": "datestring", "editable": true, "mandatory": true },
      "documentIssuingState": { "type": "string",     "editable": true, "mandatory": true },
      "personalNumber":       { "type": "string",     "editable": true, "mandatory": true },
      "address":              { "type": "string",     "editable": true, "mandatory": true },
      "state":                { "type": "string",     "editable": true, "mandatory": true }
    }
  }
}
```

</details>

***

### **Liveness check**

The **Liveness** step verifies that the user is physically present by analyzing a live facial image or video.

Identomat supports two types of liveness verification:

* **Passive liveness:** The user aligns their face within an oval frame while the system captures a short (approx. 2-second) video.
* **Active liveness:** The user performs specific actions to confirm their presence as a live person.

**Liveness check step configurations:**

* **Title:** `Liveness`
* **Type**: `liveness`
* **Key**: `liveness`
* **Flags:**&#x20;
  * liveness
  * allow\_face\_upload
  * adaptive\_liveness
  * instructions

<table data-full-width="true"><thead><tr><th width="215.96484375">Flag</th><th width="466.70703125">Description</th><th width="158.09765625">Default</th><th width="149.48046875">Type</th></tr></thead><tbody><tr><td><code>liveness</code></td><td><p>Defines the type of liveness check:</p><ul><li><code>true</code>: active liveness</li><li> <code>false</code>: passive liveness</li></ul></td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_face_upload</code></td><td><p>Allows the user to upload a selfie instead of using the camera.</p><p><br>⚠️ <em>This flag is ignored if <code>liveness</code> is <code>true</code>, as active checks require live input.</em></p></td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Allows users to optionally switch to another device to continue the session.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>adaptive_liveness</code></td><td>(SDKs only) Enables the new <strong>Adaptive liveness</strong> experience with improved UI and detection. Must be <code>true</code> to use Adaptive Liveness.<br>⚠️ If <code>adaptive_liveness</code> is <code>true</code>, the <code>liveness</code> flag <strong>must</strong> be <code>false</code>.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>instructions</code></td><td>Defines the actions the user must perform for Adaptive Liveness. <br>Only applicable if <code>adaptive_liveness</code> is <code>true</code>.<br>Currently supported option: <code>[ "smile" ]</code>.<br></td><td><code>[ "smile" ]</code></td><td>Array&#x3C;string></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`document_countries`** & **`language`** flags and **`identity-document`** verification & *active* **`liveness`** steps:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "language": "en"
    },
    "steps": [
        {
            "title": {
                "en": "ID verification"
                },
            "type": "identity-document",
            "key": "select_document_id",
            "flags": {
                "allow_document_upload": true,
                "document_types": [
                    "id",
                    "passport",
                    "driver_license",
                    "residence_license"
                ],
                "document_countries": [
                    "USA",
                    "FRA"
                ]
            }
        },
        {
            "title": {
                "en": "Liveness check"
                },
            "type": "liveness",
            "key": "liveness",
            "flags": {
                "liveness": true
            }
        }
    ]
}'
```

</details>

***

### Proof of Address

The POA step includes verification of Proof of Address and analysis of other types of documents. This step supports a wide range of general document types, such as utility bills or bank statements.

**Proof of Address step configurations:**

* **Title:** `Proof of Address`
* **Type**: `general-document`
* **Key**: `select_general_document`
* **Flags:**&#x20;
  * general\_document\_types

<table data-full-width="true"><thead><tr><th width="224.64453125">Flag</th><th width="431.55859375">Description</th><th width="172">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>general_document_types</code></td><td><p>A list of allowed document types.<br>If omitted or set to an empty array, all document types will be available for upload.</p><p></p><p>Possible values:</p><pre data-overflow="wrap"><code>"bank_statement", "utility_bill", "yellow_slip", "drivers_license", "vehicle_registration_certificate"
</code></pre></td><td>All types</td><td>&#x3C;array></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`optional_continue_on_another_device`** & **`language`** flags and **`liveness`**  &  **`general-document`** steps:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "optional_continue_on_another_device": true,
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Liveness check"
            },
        "type": "liveness",
        "key": "liveness",
        "flags": {
            "liveness": true
        }
    },
    {
        "title": {
            "en": "Proof of address"
            },
        "type": "general-document",
        "key": "select_general_document",
        "flags": {
            "general_document_types": [
                "bank_statement",
                "utility_bill",
                "yellow_slip",
                "drivers_license",
                "vehicle_registration_certificate"
            ]
        }
    }
]
}'
```

</details>

***

### Selfie with ID

In the Selfie with ID step, users are required to hold their document in their hands so that both their face and the document are visible.

**Selfie with ID step configurations:**

* **Title:** `Selfie with ID`
* **Type**: `face-document`
* **Key**: `capture_face_document`
* **Flags:**&#x20;
  * allow\_face\_doc\_upload
  * require\_face\_document

<table data-full-width="true"><thead><tr><th width="209.796875">Flag</th><th width="391.66796875">Description</th><th width="172">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>allow_face_doc_upload</code></td><td>Allows users to upload an image of themselves holding the document.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_face_document</code></td><td>Requires users to capture themselves holding the document live.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Allows users to optionally switch to another device to continue the session.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`restrict_url_sharing`** & **`language`** flags and  **`face-document`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Selfie with ID"
            },
        "type": "face-document",
        "key": "capture_face_document",
        "flags": {
            "allow_face_doc_upload": true,
            "require_face_document": true
        }
    }
]
}'
```

</details>

***

### Video call

In the Video call step, the user connects with an operator for a live verification. This can include any of the Identomat verification steps.

Identomat offers two call modes:

* **One-on-one:** Involves a secure video call between a customer and a verification operator
* **Multi-user call:** Enables the verification of multiple customers within a single session. Each user can follow their own customized workflow tailored to the specific business process.

**Video call step configurations:**

* **Title:** `Video call`
* **Type**: `video-call`
* **Key**: `video-call`
* **Array** of  `steps`
* **resetSteps**: `true/false` *(optional)*
* **hideCameraOption**: `true/false` *(optional)*
* **nameRequired***:* `true/false` *(optional)*
* **multiple\_participants:** `true/false` *(optional)*

<table data-full-width="true"><thead><tr><th width="211.5390625">Flag</th><th width="448">Description</th><th width="172">Default</th><th width="121" valign="middle">Type</th></tr></thead><tbody><tr><td><code>steps</code></td><td>List of steps to run during the video call (except <code>language</code> and <code>operator_questionnaire</code>).</td><td><code>[ ]</code></td><td valign="middle">&#x3C;array></td></tr><tr><td><code>resetSteps</code></td><td>If true, user verification data resets when they rejoin the call. </td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>hideCameraOption</code></td><td>Enabling this will hide the camera icon, preventing users from turning off the camera.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>nameRequired</code></td><td>Requires users to enter their name before joining.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>multiple_participants</code></td><td>Enables multi-user video sessions.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`return_url`** & **`language`** flags and  **`video-call`** with **`identity-document`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "es"
},
"steps": [
    {
            "type": "video-call",
            "title": {
                "es": "video-call"
                },
            "key": "video-call",
            "steps": [
                {
                    "title": {
                        "es": "ID verification"
                        },
                    "type": "identity-document",
                    "key": "select_document_id",
                    "flags": {
                        "document_types": [
                            "id",
                            "passport",
                            "driver_license",
                            "residence_license"
                        ]
                    }
                }
            ]
        }
]
}'
```

</details>

***

### Phone number

Phone number verification allows users to verify or submit their phone number.

Phone number step may include:

* **Verification** of the user's phone number using an OTP code.&#x20;
* **Collection** of the user's phone number.&#x20;

**Phone number step configurations:**

* **Type**: `phone-number`
* **Key**: `phone_number`
* **Flags:**&#x20;
  * require\_phone\_number\_check
  * require\_phone\_number

<table data-full-width="true"><thead><tr><th width="252.58984375">Flag</th><th width="391.9375">Description</th><th width="172">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>require_phone_number_check</code></td><td>Requires users to verify their number via an OTP code.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_phone_number</code></td><td>Requires users to submit a phone number without verification.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`return_url`** & **`language`** flags and  **`phone-number`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "it"
},
"steps": [
    {
        "title": {
            "it": "Phone number verification"
            },
        "type": "phone-number",
        "key": "phone_number",
        "flags": {
            "require_phone_number_check": true
        }
    }
]
}'
```

</details>

***

### Email

The Email step allows users to verify or submit their email address.

Email step may include:

* **Verification** of the user's email using an OTP code.&#x20;
* **Collection** of the user's email.

**Email step configurations:**

* **Type**: `email`
* **Key**: `require_email`
* **Flags:**
  * require\_email\_check
  * require\_email

<table data-full-width="true"><thead><tr><th width="215">Flag</th><th width="360">Description</th><th width="112">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>require_email_check</code></td><td>Requires email verification via an OTP code.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_email</code></td><td>Requires users to submit an email without verification.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`return_url`** & **`language`** flags and  **`email`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Email verification"
            },
        "type": "email",
        "key": "require_email",
        "flags": {
            "require_email_check": true
        }
    }
]
}'
```

</details>

***

### Geolocation

The Geolocation step requests the user’s location data by prompting for browser permission.

**Geolocation step configurations:**

* **Type**: `geolocation`
* **Key**: `require_geolocation`
* **Flags:**&#x20;
  * require\_geolocation

<table data-full-width="true"><thead><tr><th width="280">Flag</th><th width="448">Description</th><th width="172">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>require_geolocation</code></td><td>Requires location access to proceed through the step.</td><td><code>true</code></td><td>&#x3C;boolean></td></tr></tbody></table>

#### **cURL example:**

Example using cURL with **`return_url`** & **`language`** flags and  **`geolocation`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Geolocation"
            },
        "type": "geolocation",
        "key": "require_geolocation",
        "flags": {
            "require_geolocation": true
        }
    }
]
}'
```

</details>

***

### **AnyDoc reader**

The AnyDoc step lets you extract structured data **from any document** type using AI - such as payslips, bank statements, utility bills, or tax certificates. You define the fields you want extracted, and the system reads and validates them automatically.

**AnyDoc step configurations:**

* **Title:** `AnyDoc upload`
* **Type**: `anydoc-reader`
* **Key**: client-defined, must remain unique within the session
* **Parameters:**
  * `documentType`
  * `allowedFormats`
  * `pageConfiguration`
  * `pageCount`
  * `documentValidity`
  * `language`
  * `extractionHint`
  * `confidenceThreshold`
  * `retryLimit`
  * `fields`

<table><thead><tr><th width="174.453125">Parameter</th><th width="434.16015625">Description</th><th width="199.34375">Default</th><th>Type</th></tr></thead><tbody><tr><td><code>documentType</code></td><td>Free-text label identifying the document type (e.g. "Payslip", "Bank Statement"). Used internally across session details and API output. Required.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>allowedFormats</code></td><td>File formats accepted for upload. Possible values: <code>"pdf"</code>, <code>"image"</code></td><td>All types</td><td>Array&#x3C;string></td></tr><tr><td><code>pageConfiguration</code></td><td>Whether the document is expected to be single or multi-page. Possible values: <code>"single"</code>, <code>"multiple"</code></td><td><code>"single"</code></td><td>&#x3C;string></td></tr><tr><td><code>pageCount</code></td><td>Expected number of pages, used only when <code>pageConfiguration</code> is <code>"multiple"</code>. If omitted, all uploaded pages are processed.</td><td>null</td><td>&#x3C;number></td></tr><tr><td><code>documentValidity</code></td><td>Enforces a maximum document age based on a date field extracted from the document. See breakdown below.</td><td><code>{ "enabled": false }</code></td><td>&#x3C;object></td></tr><tr><td><code>language</code></td><td>The expected language of the document, used to guide extraction accuracy. If omitted, the language is auto-detected.</td><td>Auto-detect</td><td>&#x3C;string></td></tr><tr><td><code>extractionHint</code></td><td>Additional context about the document as a whole, provided to the AI alongside field-level hints. Recommended in English regardless of document language.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>confidenceThreshold</code></td><td>Minimum confidence score (0–100) required for an extracted field to be accepted without flagging. Applies to all fields unless overridden per field.</td><td><code>80</code></td><td>&#x3C;number></td></tr><tr><td><code>retryLimit</code></td><td>Maximum number of times the user can upload or capture a document in this step.</td><td><code>3</code></td><td>&#x3C;number></td></tr><tr><td><code>fields</code></td><td>An array of field objects defining the data to extract. See breakdown below.</td><td>-</td><td>Array&#x3C;object></td></tr></tbody></table>

#### **`documentValidity` object:**

<table><thead><tr><th width="128.01953125">Property</th><th width="535.7109375">Description</th><th width="140.33984375">Default</th><th>Type</th></tr></thead><tbody><tr><td><code>enabled</code></td><td>Turns the validity check on or off.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>dateField</code></td><td>The <code>key</code> of a field (must be of type <code>date</code>) whose extracted value is checked against <code>maxAge</code>. Required when <code>enabled</code> is <code>true</code>.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>maxAge</code></td><td>Maximum allowed document age, as a <code>value</code> + <code>unit</code> pair. Possible <code>unit</code> values: <code>"days"</code>, <code>"weeks"</code>, <code>"months"</code>, <code>"years"</code>.</td><td>-</td><td>&#x3C;object></td></tr></tbody></table>

#### **Fields**

Each object in the `fields` array defines a single piece of data to extract from the document.

<table><thead><tr><th width="147.1171875">Parameter</th><th width="462.48828125">Description</th><th width="178.23828125">Default</th><th>Type</th></tr></thead><tbody><tr><td><code>key</code></td><td>Unique identifier for the field within the step. Used to reference the extracted value in API output. Required.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>type</code></td><td>Determines how the extracted value is validated and formatted. Possible values: <code>"text"</code>, <code>"number"</code>, <code>"date"</code>, <code>"boolean"</code>, <code>"email"</code>, <code>"phone"</code>, <code>"currency"</code>, <code>"money"</code>, <code>"iban"</code> <code>"taxId"</code>, <code>"address"</code>, <code>"percentage"</code>, <code>"other"</code></td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>otherTypeLabel</code></td><td>Free-text description of the data this field contains. Used only when <code>type</code> is <code>"other"</code>; if left blank, the AI treats the field as free text with no format validation.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>label</code></td><td>Display name of the field, used to help identify it in the document and shown in session details. Optional if <code>extractionHint</code> is provided.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>alternativeNames</code></td><td>Comma-separated alternative terms this field may appear as in the document (e.g. "Sex, Male/Female" for a Gender field). Used only to inform extraction, not shown in review or API output.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>mandatory</code></td><td>Whether the session is flagged if this field cannot be extracted.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>confidenceThreshold</code></td><td>Overrides the step-level <code>confidenceThreshold</code> for this specific field.</td><td>Inherits step default</td><td>&#x3C;number></td></tr><tr><td><code>extractionHint</code></td><td>Additional context about this field, provided to the AI when extracting its value. Recommended in English regardless of document language. Optional if <code>label</code> is provided.</td><td>null</td><td>&#x3C;string></td></tr></tbody></table>

> **Note:** At least one of `label` or `extractionHint` must be provided per field, so the AI has something to search for.

#### **cURL example:**

Example using cURL with `anydoc-reader` step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "en"
    },
    "steps": [
        {
            "type": "anydoc-reader",
            "key": "anydoc-payslip-1",
            "title": { "en": "AnyDoc upload" },
            "description": { "en": "Upload your most recent payslip so we can confirm your stated income." },
            "documentType": "Payslip",
            "allowedFormats": ["pdf", "image"],
            "pageConfiguration": "multiple",
            "pageCount": 2,
            "documentValidity": {
                "enabled": true,
                "dateField": "issue-date",
                "maxAge": { "value": 3, "unit": "months" }
            },
            "language": "en",
            "extractionHint": "This is a European payroll slip. Salary figures may use either comma or period as decimal separator.",
            "confidenceThreshold": 80,
            "retryLimit": 3,
            "fields": [
                { "key": "employee-name", "type": "text", "label": "Employee name", "mandatory": true },
                { "key": "issue-date", "type": "date", "label": "Issue date", "mandatory": true },
                { "key": "net-salary", "type": "money", "label": "Net salary", "mandatory": true, "confidenceThreshold": 90 }
            ]
        }
    ]
}'
```

</details>

***

### **SSN verification**

The SSN verification step verifies a user's Social Security Number as part of the identification process.

**SSN verification step configurations:**

* **Title:** `SSN verification`
* **Type**: `ssn`
* **Key**: client-defined, must remain unique within the session

#### **cURL example:**

Example using cURL with **`return_url`** & **`language`** flags and an **`ssn`** step:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "en"
    },
    "steps": [
        {
            "type": "ssn",
            "title": {
                "en": "SSN verification"
            },
            "key": "ssn-gk466q"
        }
    ]
}'
```

</details>

***

### User questionnaire

The user questionnaire step allows you to collect custom user input as part of the verification flow. It supports various question types and provides multilingual support for titles and descriptions. All responses are saved to the verification session. This step has a slightly different structure compared to other steps.

**User questionnaire step configurations:**

* `type`

  Must be set to `"user-questionnaire"` to define this step as a user questionnaire block.
* `key` \
  A client-defined unique key for this questionnaire step. It must remain unique within a single session to avoid conflicts.
* `title` \
  The main title of the questionnaire displayed on the user interface.\
  Must always be provided as an \<object> with language codes as keys (e.g., `"en"`), even if only one language is used. This ensures consistency and supports future localization.
* `description` \
  Text displayed beneath the title in the user interface, providing context or instructions.\
  Must always be an \<object> of language codes. Same format and rules as `title`.
* `questions` \
  An \<array> of question objects to be presented to the user.\
  Supported question types include:
  * `string`: **Short answer** – The user enters a short text answer.
  * `multiple-choice`: **Checkboxes** – Allows the user to select one or more options.
  * `options`: **Radio** – The user selects a single option from a list.
  * `dropdown` : **Dropdown List** – The user selects one or more options from a dropdown menu.
  * `file`: **File Upload** – Allows the user to upload a file as a response.
  * `attachment`: **Attachment -** Allows attaching files either dynamically (via API/configuration) or per session. Depending on configuration, files may be pre-attached for the user or uploaded by the operator during the session.
* `successButtonTitle`\
  Defines the label of the confirmation button displayed at the end of the questionnaire.\
  Must also be an \<object> of language codes, even if only one language is used.\
  If any question is marked as `"mandatory": true`, the button will remain disabled until all required questions are answered.

#### **Questions**

Each question in the `questions` array supports a set of parameters that define how it behaves and appears to the user. Here's a breakdown of all supported properties:

* `type`\
  Defines the question type. \
  Supported values:
  * `string` – Short answer
  * `multiple-choice` – Checkbox (multiple selection)
  * `options` – Radio buttons (single selection)
  * `dropdown` – Dropdown menu (single or multi-select)
  * `file` – File upload
  * `attachment` - Attach files and share with the end-user
* `title`\
  A multilingual \<object> representing the question label.\
  Example:

```json
"title": {
  "en": "What is your occupation?",
  "fr": "Quelle est votre profession ?"
}
```

* `key`\
  A **unique identifier** for the question within the same questionnaire. This is client-defined and used for referencing and data mapping.
* `mandatory`\
  Indicates whether the question must be answered before the user can proceed.
  * Value: `true` or `false`
* `answer` \
  Allows you to **preset an answer** for the user.

  * `string`: A plain text string (e.g., `"John Doe"`).
  * `options`: A single option key (e.g., `"opt_a"`).
  * `multiple-choice`: An array of option keys (e.g., `["opt_a", "opt_c"]`).
  * `dropdown`: Not applicable.
  * `file`: Not applicable.
  * `attachment`: An array of file IDs

  *Note: End-users* can modify pre-filled answers unless `readOnly` is enabled.
* `readOnly` \
  Displays the question in a **non-editable** state. Users can view the question and answer but cannot change it.
  * Value: `true` or `false`
* `showConditions` \
  Defines a **conditional display rule** for the question, based on the answer to a previous question.
  * `questionKey`  Key of the controlling question.
  * `answer`  Key of the answer (for radio/checkbox) or specific text (for string)

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

* `multiple`\
  Specific to `dropdown` type.
  * If `true`, the user can select **multiple values** from the dropdown.
  * Value: `true` or `false`

#### **Options**

Options are used exclusively in `multiple-choice` , `options` and `dropdown` type questions. They define the selectable choices that the user can pick from.

Each question that supports options must include the following parameter:

* `options` \
  An \<array> of option objects for the question. Each object must include the following:
* `title`\
  The text label for the option, shown to the user during the verification flow.\
  Must always be provided as an \<object> with language codes as keys, even if only one language is used.\
  This ensures consistency across multilingual flows. \
  Example:

```json
{
  "en": "Self-employed"
}
```

* `key`\
  A unique identifier for the option within the questionnaire.\
  This value is used for referencing in preset answers, conditions, and session data.\
  It must be unique within the same questionnaire to avoid conflicts.

#### **List of parameters with examples:**

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the questionnaire shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "terms-and-conditions"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title of the user questionnaire, displayed as the block title on the user's side. The title can be an &#x3C;object> containing different <strong>languages</strong>, allowing the title to be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title on the user's side. Similar to the title, the description can be an &#x3C;object> containing different <strong>languages</strong>, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>An &#x3C;array>  of questions with the following types: <code>string</code>, <code>multiple-choice</code> , <code>options</code>, <code>dropdown</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        }
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option1"
        },
        { 
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>successButtonTitle</code></td><td>The title of the action button in the questionnaire. If the questions are mandatory, the button is deactivated until the user completes the questionnaire.</td><td>Confirm</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"successButtonTitle": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr></tbody></table>

#### **cURL example:**

<details>

<summary><em>Expand to view user-questionnaire example</em></summary>

<pre class="language-bash"><code class="lang-bash">curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "es"
},
"steps": [
    {
            "key": "questionnaire-page-1",
            "type": "user-questionnaire",
            "title": { 
                "es": "Tu título",
                "en": "Your title"
<strong>                },
</strong>            "description": {
                "es": "Tu descripción",
                "en": "Your description"
                },
            "questions": [
                {
                "type": "string",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question1",
                "mandatory": true
                },
                {
                "type": "multiple-choice",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question2",
                "mandatory": false,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option1"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option2"
                    }
                ],
                "answer": ["option2"],
                "readOnly": true
                },
                {
                "type": "options",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question3",
                "mandatory": true,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option3"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option4"
                    }
                ]
            }
        ]
    }
]
}'
</code></pre>

</details>

#### **Question type: Short answer**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="117.875">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>string</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "string"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "your-address"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>format</code></td><td>Specifies the expected structure of the user’s response. Determines how the input is validated.</td><td><code>free-text</code></td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"format": {
    "type": "free-text"
}
</code></pre><pre class="language-json"><code class="lang-json">"format": {
    "type": "email"
}
</code></pre><pre><code>"format": {
    "type": "contactNumber"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the prefilled answer can be displayed in different languages.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": { 
        "en": "This is a prefilled answer",
        "es":"Esta es una respuesta prellenada."
}
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view SHORT ANSWER question example</em></summary>

```json
"questions": [
    {
        "type": "string",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question1",
        "mandatory": true,
        "format": {
            "type": "email"
        },
        "answer": {
            "en": "This is a prefilled answer",
            "es": "Esta es una respuesta prellenada."
        },
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
        },
        "readOnly": false
    }
]
```

</details>

***

#### **Question type: Checkbox**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>multiple-choice</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "multiple-choice"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "check-two-answers"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;array> <strong>of option keys</strong> assigned to this question.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": [
    "option-1",
    "option-2"
]
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view CHECKBOX question example</em></summary>

```json
"questions": [
    {
        "type": "multiple-choice",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question2",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": [
                "identity-document",
                "proof-of-address"
            },
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Question type: Radio**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>options</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "options"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-one-answer"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;string> <strong>of an option key</strong> assigned to this question.</td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": "option-1"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view RADIO question example</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question3",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": "identity-document",
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Question type: Dropdown**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>dropdown</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "dropdown"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>multiple</code></td><td><p>Specifies whether the question is single or multiple choice.</p><p></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"multiple": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view DROPDOWN question example</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question4",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "multiple": true,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Question type: File upload**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>file</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "file"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  <code>&#x3C;object></code> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title. Similar to the title, the description can be an &#x3C;object> containing different languages, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Specifies the types of files the user is allowed to upload.<br><br>Possible values:<br> <code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><p></p><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Specifies the maximum number of files the user is allowed to upload.<br><br>Possible values:<br>A number from 1 to 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view FILE UPLOAD question example</em></summary>

```json
"questions": [
    {
        "type": "file",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question5",
            "mandatory": true,
            "fileTypes": [
            "pdf",
            "image"
            ],
            "filesMaxCount": 5,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Question type: Attachment**

The **Attachment** question type allows attaching files to a questionnaire. It supports two main use cases:

1. **Operator-added attachments per session**\
   The operator uploads files during or before the verification session and shares them with the end-user.
2. **Predefined attachments from Configuration or API**\
   Files are uploaded in the Configuration interface or dynamically provided via API. These files are automatically included in future sessions.

**Behavior**

* Attachments are visible to both the operator and the end-user.
* When files are provided via API (`answer`) or Configuration, they will appear when the questionnaire is opened.
* Depending on settings, the operator may be allowed or restricted from modifying attachments after the user has confirmed the questionnaire.

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>attachment</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "attachment"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "attached-documents"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  <code>&#x3C;object></code> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title. Similar to the title, the description can be an &#x3C;object> containing different languages, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Specifies the types of files the user is allowed to upload.<br><br>Possible values:<br> <code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><p></p><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Specifies the maximum number of files the user is allowed to upload.<br><br>Possible values:<br>A number from 1 to 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>allowOperatorUpload</code></td><td>Controls how files are added:<br>• <strong>true</strong> – operator uploads files per session.<br>• <strong>false</strong> – files are provided via Configuration or API only.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorUpload": true
</code></pre></td></tr><tr><td><code>allowOperatorOverride</code></td><td>If <strong>false</strong>, the operator cannot edit attachments after the user confirms the questionnaire. <br>If <strong>true</strong>, the operator may still upload or remove files.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorOverride": true
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view ATTACHMENT question example</em></summary>

```json
"questions": [
    {
        "type": "attachment",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "description": {
            "es": "Tu descripción",
            "en": "Your description"
            },
        "key": "question5",
        "fileTypes": [
            "pdf",
            "image"
            ],
        "filesMaxCount": 5,
        "allowOperatorUpload": true,
        "allowOperatorOverride": true,
        "answer": [ ],
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
            }
        }
    ]
```

</details>

***

### Operator questionnaire

The operator questionnaire is part of the session and is designed to be filled out by the **operator**, either during or after the verification call. It allows operators to collect specific information or provide manual input.\
Its structure closely mirrors the user questionnaire, with the main difference being who completes the form.

**Operator questionnaire step configurations:**

* `type`\
  Must be set to `"operator-questionnaire"` to define this step as an operator-facing form.
* `key` \
  A unique identifier for the operator questionnaire step. This key is defined by the client and must remain unique within a single session.
* `title` \
  The name of the section as shown in the operator interface.\
  Must always be an \<object> with language codes as keys, even if only one language is used.\
  Example:

```json
"title": {
  "en": "Operator notes"
}
```

* `description` \
  Text displayed under the title, used to give context or instructions to the operator.\
  Also must be provided as an `<object>` of language codes.
* `questions`\
  An \<array> of question objects that define the fields the operator will fill out.\
  Supported question types include:
  * `string`: **Short answer** – Operator types a short answer as plain text.
  * `multiple-choice`: **Checkbox** – Operator selects one or more values from a list of options.
  * `options`: **Radio** – Operator selects one option from a predefined set.
  * `dropdown`: **Dropdown menu** – The operator selects one or more options from a dropdown list, depending on configuration.
  * `file`: **File upload** – The operator uploads one or more files (e.g., documents or images) as part of the questionnaire.

#### **Questions**

Each question in the Operator Questionnaire must be defined as an object within the `questions` array. The following parameters are supported for each question:

* `type` \
  The type of question. Supported values are:
  * `string` – Short answer
  * `multiple-choice` – Checkbox
  * `options` – Radio buttons
  * `dropdown` – Dropdown list
  * `file` – File upload
* `title`\
  The question title. There are no length or symbol restrictions. \
  Must always be provided as an \<object> of language codes (e.g., `"en"`, `"de"`), even if only one language is used.\
  Example:

```json
"title": {
  "en": "Reason for rejection"
}
```

* `key`\
  A unique identifier for the question, defined by the client. It must be unique within the same questionnaire.
* `mandatory`\
  \<boolean>. Indicates whether the question must be answered before submitting the questionnaire.\
  Default is `false`.
* `answer`\
  Allows you to **preset an answer** for the operator.

  * For `string`: A plain text string (e.g., `"Invalid ID"`).
  * For `options`: A single option key (e.g., `"opt_a"`).
  * For `multiple-choice`: An array of option keys (e.g., `["opt_a", "opt_c"]`).
  * For `dropdown`: Not applicable.
  * For `file`: Not applicable.

  *Note:* Operators can modify pre-filled answers unless `readOnly` is enabled.
* `readOnly`\
  Displays the question in a **non-editable** state. Operators can view the question and answer but cannot change it.
* `showConditions`\
  Defines a **conditional display rule** for the question, based on the answer to a previous question.
  * `questionKey` Key of the controlling question.
  * `answer` Key of the answer (for radio/checkbox) or specific text (for string).

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

#### **Options**

Options are used exclusively in `multiple-choice` , `options` and `dropdown` type questions. They define the selectable choices that the user can pick from.

Each question that supports options must include the following parameter:

* `options`\
  An \<array> of option objects for the question. Each object must include the following:
* `title`\
  The text label for the option, shown to the operator during in the verification session. Must always be provided as an \<object> with language codes as keys, even if only one language is used. This ensures consistency across multilingual flows.

```json
{
  "en": "ID card"
}
```

* `key`\
  A unique identifier for the option within the questionnaire.\
  This value is used for referencing in preset answers, conditions, and session data.\
  It must be unique within the same questionnaire to avoid conflicts.

#### **List of parameters with examples:**

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the questionnaire shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "document-collection"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title of the operator questionnaire, displayed as the tab name in the session. The title can be an <code>&#x3C;object></code> containing different <strong>languages</strong>, allowing the title to be displayed in the selected language.</td><td>-</td><td>&#x3C;string> or &#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Similar to the title, the description can be an &#x3C;object> containing different <strong>languages</strong>, so that it can be displayed in the selected language.</td><td>-</td><td>&#x3C;string> or &#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>An &#x3C;array>  of questions with the following types: <code>string</code>, <code>multiple-choice</code> and <code>options</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": "Your title",
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": "Your title",
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": "Your title",
        "key": "option1"
        },
        { 
        "title": "Your title",
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

#### **cURL example:**

<details>

<summary><em>Expand to view operator-questionnaire example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "restrict_url_sharing": true,
        "language": "es"
    },
    "steps": [
        {
            "key": "questionnaire-page-1",
            "type": "operator-questionnaire",
            "title": {
                "es": "Tu título",
                "en": "Your title"
            },
            "description": {
                "es": "Tu descripción",
                "en": "Your description"
            },
            "questions": [
                {
                    "type": "string",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question1",
                    "mandatory": true
                },
                {
                    "type": "multiple-choice",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question2",
                    "mandatory": false,
                    "options": [
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option1"
                        },
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option2"
                        }
                    ],
                    "answer": [
                        "option2"
                    ],
                    "readOnly": true
                },
                {
                    "type": "options",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question3",
                    "mandatory": true,
                    "options": [
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option3"
                        },
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option4"
                        }
                    ]
                }
            ]
        }
    ]
}'
```

</details>

***

## Additional session parameters

Besides `steps` and `flags`, you can also configure additional parameters when creating a session. These parameters help with session identification and management.

<table data-full-width="true"><thead><tr><th width="218">Parameter name</th><th width="437">Description</th><th width="216">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>name</code></td><td>A custom session label shown in the dashboard before the user completes verification. Once the session is completed, this value is replaced with the verified user's name (if available).</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>clientUserId</code></td><td>A unique identifier used to link the session to a specific user in your system. This is useful for grouping sessions or syncing with your internal user or account IDs.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>groupId</code></td><td>Defines the group assigned to the session. For example, in a video call, only members of this specified group will be able to receive the call.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>scheduleStartTime</code></td><td>The datetime when the session becomes available to the end-user. Before this time, the session cannot be started.<br>Format: ISO 8601 — e.g., <code>"2024-06-20T07:33:00.000Z"</code></td><td>null</td><td>&#x3C;string> (ISO 8601 datetime)</td></tr><tr><td><code>scheduleEndTime</code></td><td>The datetime after which the session is no longer accessible to the end-user.<br>Format: ISO 8601 — e.g., <code>"2024-06-20T09:00:00.000Z"</code></td><td>null</td><td>&#x3C;string> (ISO 8601 datetime)</td></tr></tbody></table>

**Example:**

```json
{
  "name": "KYC for John Smith",
  "clientUserId": "user-12345",
  "groupId": "682c60525a91a1e5b473858d",
  "scheduleStartTime": "2024-06-20T07:33:00.000Z",
  "scheduleEndTime": "2024-06-20T09:00:00.000Z",
  "steps": [...],
  "flags": [...]
}
```


# KYB (Know Your Business)

The KYB flow verifies the legitimacy of business entities, including company details, registration documents, and associated representatives.

The **KYB flow** is designed to collect and verify company information, including details about the organization itself, its beneficiaries, and its representatives.\
It ensures that all relevant entities are identified and verified before completing the onboarding process.

The KYB flow consists of three main steps:&#x20;

{% stepper %}
{% step %}
[Company data](#company-data)
{% endstep %}

{% step %}
[Beneficiaries](#beneficiaries)
{% endstep %}

{% step %}
[Review](#review)
{% endstep %}
{% endstepper %}

Each step is fully configurable and can include its own parameters.

## Flags

`flags` is an object that contains optional configuration parameters for adjusting the KYB verification flow.\
Below is a summary of the most commonly used flags:

<table data-full-width="true"><thead><tr><th width="218">Flag name</th><th width="437">Description</th><th width="216">Default</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>skip_face</code></td><td>Skips the <code>liveness</code> step if it already exists in the defined steps. Prevents duplication when using custom flows.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>skip_document</code></td><td>Skips the <code>identity-document</code> step if it already exists in the defined steps. Prevents duplication when using custom flows.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>return_url</code></td><td>URL to redirect the user to after the identification process is completed. If omitted, the session is assumed to be embedded in an iframe.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>language</code></td><td><p>User interface language code. Supported values:</p><pre data-overflow="wrap"><code>"es", "ka", "uk", "ru", "uz", "it", "gr", "tr", "ro", "ar", "de", "pl", "hi", "bn", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre><p></p></td><td><code>"en"</code></td><td>&#x3C;string></td></tr><tr><td><code>skip_desktop</code></td><td>Limits sessions to mobile devices only. If initiated on desktop, a QR code is shown to transfer the session to a mobile device.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>switch_device_url</code></td><td>A custom URL to display in the QR code when the camera is unavailable or blocked. If omitted or empty, the QR code will not be displayed.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>restrict_url_sharing</code></td><td>Prevents the session URL from being used on a different browser or device. <br>If <code>true</code>, the QR code will not appear when camera access is denied—unless <code>switch_device_url</code> is also defined.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

## Steps

The `steps` array defines the sequence and structure of the KYB process. It is passed together with the `company_key` and `flags` parameters when creating a session.

Each step in the array can contain its own properties:

<table><thead><tr><th width="163.91015625">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>type</code></td><td>The type of the specific step (see list of supported step types below).</td></tr><tr><td><code>key</code></td><td>A unique identifier for the step. This key can be customized but must remain unique within the session.</td></tr><tr><td><code>flags</code></td><td>Step-specific configuration flags that control the behavior of this step.</td></tr><tr><td><code>title</code></td><td>A custom title provided by the client, displayed to the user during this step in the interface.</td></tr></tbody></table>

### **Supported step types**

Below is a list of all step types currently supported in the system:

* [Language](#language)
* [Company data](#company-data)
* [Beneficiaries](#beneficiaries)
* [Review](#review)
* [User questionnaire](#user-questionnaire)

***

### Language

The **Language** step allows the user to select their preferred interface language at the beginning of the identification process.

**Language step configurations:**

* **Title:** `Language`
* **Type**: `language`
* **Key**: `language`
* **Array** of `languages`&#x20;

<table data-full-width="true"><thead><tr><th width="259">Flag</th><th width="448">Description</th><th width="109.34765625">Default</th><th width="130.85546875">Type</th></tr></thead><tbody><tr><td><code>languages</code></td><td><p>An array of language codes to display. If left empty, all supported languages will be shown.</p><pre data-overflow="wrap"><code>"en", "ka", "es", "uk", "gr", "it", "de", "ru", "uz", "ro", "tr", "ar", "pl", "bn", "hi", "hy", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td>All</td><td>Array&#x3C;string></td></tr></tbody></table>

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
                "title": {
                  "en": "Language",
                  "ka": "ენა",
                  "es": "Idioma",
                  "uk": "Мова",
                  "gr": "Γλώσσα",
                  "it": "Lingua",
                  "de": "Sprache",
                  "ru": "Язык",
                  "uz": "Til",
                  "ro": "Limbă",
                  "tr": "Dil",
                  "ar": "اللغة",
                  "pl": "Język",
                  "bn": "ভাষা",
                  "hi": "भाषा",
                  "hy": "Լեզու",
                  "az": "Dil",
                  "ja": "言語",
                  "pt": "Idioma",
                  "fr": "Langue",
                  "kk": "Тіл",
                  "sv": "Språk"
                },
                "type": "language",
                "key": "language",
                "languages": [
                    "en",
                    "ka",
                    "es",
                    "uk",
                    "gr",
                    "it",
                    "de",
                    "ru",
                    "uz",
                    "ro",
                    "tr",
                    "ar",
                    "pl",
                    "bn",
                    "hi",
                    "hy",
                    "az",
                    "ja",
                    "pt",
                    "fr",
                    "kk",
                    "sv"
                ]
            },
            {
                "title": {
                  "en": "ID verification",
                  "ka": "პირადობის დადასტურება",
                  "es": "Verificación de identidad",
                  "uk": "Підтвердження особи",
                  "gr": "Επαλήθευση ταυτότητας",
                  "it": "Verifica dell'identità",
                  "de": "Identitätsprüfung",
                  "ru": "Проверка удостоверения личности",
                  "uz": "Shaxsni tasdiqlash",
                  "ro": "Verificare a identității",
                  "tr": "Kimlik doğrulama",
                  "ar": "التحقق من الهوية",
                  "pl": "Weryfikacja tożsamości",
                  "bn": "পরিচয় যাচাই",
                  "hi": "पहचान सत्यापन",
                  "hy": "Անձնագրի հաստատում",
                  "az": "Şəxsiyyətin təsdiqi",
                  "ja": "本人確認",
                  "pt": "Verificação de identidade",
                  "fr": "Vérification d'identité",
                  "kk": "Жеке басын тексеру",
                  "sv": "ID-verifiering"
            },
                "type": "identity-document",
                "key": "select_document_id-1",
                "flags": {
                    "document_types": [
                        "id",
                        "passport",
                        "driver_license",
                        "residence_license"
                    ],
                    "allow_document_upload": false,
                    "disable_document_capture": false
                }
            }
    ]
}'
```

</details>

***

### Company data

This step collects the core information about the company.

* **Title:** `Company data`
* **Description:** `Follow the simple steps below`
* **Type**: `company`
* **Key**: `company`
* **Fields:**
  * Company name (always mandatory)
  * Registration number (always mandatory)
  * Registration country (always mandatory)
  * Type of entity
  * Legal address
  * VAT / Tax ID
  * Date of Incorporation
  * Contact number
  * Contact email address

**Step example:**

```json
{
  "type": "company",
  "key": "company",
  "title": { "en": "Company data" },
  "description": { "en": "Follow the simple steps below" },
  "fields": [...]
}
```

**Step parameters:**

<table data-full-width="true"><thead><tr><th width="224.7890625">Parameter</th><th width="632.81640625">Description</th><th width="121">Type</th></tr></thead><tbody><tr><td><code>type</code></td><td>Step type. Must be <code>company</code>.</td><td>&#x3C;string></td></tr><tr><td><code>key</code></td><td>Unique identifier for the step.</td><td>&#x3C;string></td></tr><tr><td><code>title</code></td><td>Localized title text displayed as the block title to the user. The title can be an &#x3C;object> containing different <strong>languages</strong>, allowing the title to be displayed in the selected language during the flow.</td><td>&#x3C;object></td></tr><tr><td><code>description</code></td><td>A description that appears below the title on the user's side. Similar to the title, the description can be an &#x3C;object> containing different <strong>languages</strong>, so that it can be displayed in the selected language during the flow.</td><td>&#x3C;object></td></tr><tr><td><code>fields</code></td><td>List of fields to be collected during this step.</td><td>&#x3C;array></td></tr></tbody></table>

**Fields:**

Example:

```json
"fields": [
                  { "type": "companyName", "mandatory": true },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ]
```

<table data-full-width="true"><thead><tr><th width="237.4921875">Field</th><th width="593.64453125">Description</th><th width="195.2734375">Input type</th></tr></thead><tbody><tr><td><code>companyEntityType</code></td><td><p><strong>Mandatory field.</strong> </p><p>Type of legal entity. Options include:</p><p></p><ul><li>Limited liability company</li><li>Publicly listed company</li><li>Sole proprietor</li><li>Partnership</li><li>Corporation</li><li>Trust</li><li>Private foundation</li><li>Charity</li><li>Nonprofit organization</li><li>Other</li></ul></td><td>Dropdown</td></tr><tr><td><code>companyName</code></td><td><p><strong>Mandatory field.</strong> </p><p>Official registered company name.</p></td><td>Text input</td></tr><tr><td><code>registrationNumber</code></td><td><p><strong>Mandatory field.</strong> </p><p>Company registration number.</p></td><td>Text input</td></tr><tr><td><code>registrationCountry</code></td><td><strong>Mandatory field.</strong> <br>Country of incorporation. Options: all countries list.</td><td>Dropdown</td></tr><tr><td><code>legalAddress</code></td><td>Company’s registered legal address.</td><td>Text input</td></tr><tr><td><code>taxId</code></td><td>Tax identification number.</td><td>Text input</td></tr><tr><td><code>dateOfIncorporation</code></td><td>Company incorporation date.</td><td>Date picker</td></tr><tr><td><code>contactNumber</code></td><td>Company contact phone number.</td><td>Text input</td></tr><tr><td><code>email</code></td><td>Company contact email address.</td><td>Text input</td></tr></tbody></table>

***

### Beneficiaries

The **Beneficiaries step** collects information about all individuals or companies with roles in the organization.

Each role can trigger either a KYC or KYB verification flow.

**Supported roles:**

* **Shareholder** – can be either an individual or another company
* **UBOs (Ultimate Beneficial Owner)** – always an individual with ownership/control
* **Director** – individual member of the board
* **Representative** – authorized individual acting on behalf of the company
* **Other** – custom role (requires position name)

**Step example:**

```json
{
  "type": "beneficiaries",
  "key": "beneficiaries",
  "title": { "en": "Beneficiaries" },
  "description": { "en": "Enter information about the company's beneficiaries" },
  "roles": { ... },
  "kycConfigId": "687e0ba12cf633bd323cb0db",
  "kybConfigId": "687e0ba12cf633bd323cb0d2"
}
```

**Step parameters:**

<table data-full-width="true"><thead><tr><th width="257.1328125">Parameter</th><th width="540.40234375">Description</th><th width="198.234375">Type</th></tr></thead><tbody><tr><td><code>type</code></td><td>Step type. Must be <code>beneficiaries</code>.</td><td>&#x3C;string></td></tr><tr><td><code>key</code></td><td>Unique identifier for the step.</td><td>&#x3C;string></td></tr><tr><td><code>title</code></td><td>Localized title text displayed as the block title to the user. The title can be an &#x3C;object> containing different <strong>languages</strong>, allowing the title to be displayed in the selected language during the flow.</td><td>&#x3C;object></td></tr><tr><td><code>description</code></td><td>A description that appears below the title on the user's side. Similar to the title, the description can be an &#x3C;object> containing different <strong>languages</strong>, so that it can be displayed in the selected language during the flow.</td><td>&#x3C;object></td></tr><tr><td><code>kycConfigId</code></td><td>ID of the KYC configuration applied to individuals.</td><td>&#x3C;string></td></tr><tr><td><code>kybConfigId</code></td><td>ID of the KYB configuration applied to companies.</td><td>&#x3C;string></td></tr><tr><td><code>roles</code></td><td>Defines roles (<code>shareholder</code>, <code>ubo</code>, <code>director</code>, <code>representative</code>, <code>other</code>).</td><td>&#x3C;object></td></tr></tbody></table>

#### **Role: Shareholder**

* Can be either an **individual** or a **company**.
* `verification: true` → triggers a verification flow
  * **Individual** → KYC (`kycConfigId`)
  * **Company** → KYB (`kybConfigId`)

**Important:**\
Pre-created KYC and KYB configurations are required for shareholder verification flows.\
These configurations define which verification steps (e.g., document upload, selfie, questionnaire) will be applied during the process. \
To learn how to create and manage KYC configurations, refer to the [KYC developer's guide](/developer-tools/developer-guide/kyc-know-your-customer) or [KYC configuration guide](/no-code-workflows/kyc-steps).

**Role example:**

```json
"roles": {
        "shareholder": {
              "fields": [
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyName", "mandatory": true },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Shareholder fields:**

<table data-full-width="true"><thead><tr><th width="237.4921875">Field</th><th width="484.6484375">Description</th><th width="111.6953125">Input type</th><th>Applies to</th></tr></thead><tbody><tr><td><code>ownershipPercentage</code></td><td>Percentage of ownership in the company.</td><td>Text input</td><td>Company / Individual</td></tr><tr><td><code>companyName</code></td><td><p><strong>Mandatory field.</strong> </p><p>Official registered company name.</p></td><td>Text input</td><td>Company</td></tr><tr><td><code>registrationNumber</code></td><td><p><strong>Mandatory field.</strong> </p><p>Shareholder company registration number.</p></td><td>Text input</td><td>Company</td></tr><tr><td><code>registrationCountry</code></td><td><strong>Mandatory field.</strong> <br>Country of incorporation. Options: all countries list.</td><td>Dropdown</td><td>Company</td></tr><tr><td><code>companyEntityType</code></td><td><p><strong>Mandatory field.</strong> </p><p>Type of legal entity. Options include:</p><p></p><ul><li>Limited liability company</li><li>Publicly listed company</li><li>Sole proprietor</li><li>Partnership</li><li>Corporation</li><li>Trust</li><li>Private foundation</li><li>Charity</li><li>Nonprofit organization</li><li>Other</li></ul></td><td>Dropdown</td><td>Company</td></tr><tr><td><code>legalAddress</code></td><td>Registered legal address of shareholder company.</td><td>Text input</td><td>Company</td></tr><tr><td><code>taxId</code></td><td>Tax identification number.</td><td>Text input</td><td>Company</td></tr><tr><td><code>dateOfIncorporation</code></td><td>Company incorporation date.</td><td>Date picker</td><td>Company</td></tr><tr><td><code>website</code></td><td>Company website.</td><td>Input</td><td>Company</td></tr><tr><td><code>contactNumber</code></td><td>Contact phone number.</td><td>Text input</td><td>Company / Individual</td></tr><tr><td><code>email</code></td><td>Contact email address.</td><td>Text input</td><td>Company / Individual</td></tr><tr><td><code>firstName</code></td><td><strong>Mandatory field.</strong> <br>Individual's first name.</td><td>Text input</td><td>Individual</td></tr><tr><td><code>lastName</code></td><td><strong>Mandatory field.</strong> <br>Individual's last name.</td><td>Text input</td><td>Individual</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Mandatory field.</strong> <br>Individual's date of birth.</td><td>Date picker</td><td>Individual</td></tr></tbody></table>

#### **Role: UBOs**

* Always an **individual**.
* `verification: true` → triggers KYC flow (`kycConfigId`)

**Important:**\
Pre-created KYC configuration is required for UBOs verification flows.\
These configurations define which verification steps (e.g., document upload, selfie, questionnaire) will be applied during the process. \
To learn how to create and manage KYC configurations, refer to the [KYC developer's guide](/developer-tools/developer-guide/kyc-know-your-customer) or [KYC configuration guide](/no-code-workflows/kyc-steps).

**Role example:**

```json
"roles": {
            "ubo": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "ownershipPercentage", "mandatory": false },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**UBOs fields:**

<table data-full-width="true"><thead><tr><th>Field</th><th>Description</th><th>Input type</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Mandatory field.</strong> <br>Individual's first name.</td><td>Text input</td></tr><tr><td><code>lastName</code></td><td><strong>Mandatory field.</strong> <br>Individual's last name.</td><td>Text input</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Mandatory field.</strong> <br>Individual's date of birth.</td><td>Date picker</td></tr><tr><td><code>ownershipPercentage</code></td><td>Percentage of ownership in the company.</td><td>Text input</td></tr><tr><td><code>contactNumber</code></td><td>Company contact phone number.</td><td>Text input</td></tr><tr><td><code>email</code></td><td>Company contact email address.</td><td>Text input</td></tr></tbody></table>

#### **Role: Director**

* Always an **individual**.
* `verification: true` → triggers KYC flow (`kycConfigId`)

**Important:**\
Pre-created KYC configuration is required for Director verification flows.\
These configurations define which verification steps (e.g., document upload, selfie, questionnaire) will be applied during the process. \
To learn how to create and manage KYC configurations, refer to the [KYC developer's guide](/developer-tools/developer-guide/kyc-know-your-customer) or [KYC configuration guide](/no-code-workflows/kyc-steps).

**Role example:**

```json
"roles": {
          "director": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Director fields:**

<table data-full-width="true"><thead><tr><th>Field</th><th>Description</th><th>Input type</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Mandatory field.</strong> <br>Individual's first name.</td><td>Text input</td></tr><tr><td><code>lastName</code></td><td><strong>Mandatory field.</strong> <br>Individual's last name.</td><td>Text input</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Mandatory field.</strong> <br>Individual's date of birth.</td><td>Date picker</td></tr><tr><td><code>contactNumber</code></td><td>Company contact phone number.</td><td>Text input</td></tr><tr><td><code>email</code></td><td>Company contact email address.</td><td>Text input</td></tr></tbody></table>

#### **Role: Representative**

* Always an **individual**.
* `verification: true` → triggers KYC flow (`kycConfigId`)

**Important:**\
Pre-created KYC configuration is required for Representative verification flows.\
These configurations define which verification steps (e.g., document upload, selfie, questionnaire) will be applied during the process. \
To learn how to create and manage KYC configurations, refer to the [KYC developer's guide](/developer-tools/developer-guide/kyc-know-your-customer) or [KYC configuration guide](/no-code-workflows/kyc-steps).

**Role example:**

```json
"roles": {
          "representative": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Representative fields:**

<table data-full-width="true"><thead><tr><th>Field</th><th>Description</th><th>Input type</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Mandatory field.</strong> <br>Individual's first name.</td><td>Text input</td></tr><tr><td><code>lastName</code></td><td><strong>Mandatory field.</strong> <br>Individual's last name.</td><td>Text input</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Mandatory field.</strong> <br>Individual's date of birth.</td><td>Date picker</td></tr><tr><td><code>contactNumber</code></td><td>Company contact phone number.</td><td>Text input</td></tr><tr><td><code>email</code></td><td>Company contact email address.</td><td>Text input</td></tr></tbody></table>

#### **Role: Other**

* Always an **individual**.
* `verification: true` → triggers KYC flow (`kycConfigId`)

**Important:**\
Pre-created KYC configuration is required for Other role verification flows.\
These configurations define which verification steps (e.g., document upload, selfie, questionnaire) will be applied during the process. \
To learn how to create and manage KYC configurations, refer to the [KYC developer's guide](/developer-tools/developer-guide/kyc-know-your-customer) or [KYC configuration guide](/no-code-workflows/kyc-steps).

**Role example:**

```json
"roles": {
          "other": {
              "fields": [
                { "type": "positionName", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Fields:**

<table data-full-width="true"><thead><tr><th>Field</th><th>Description</th><th>Input type</th></tr></thead><tbody><tr><td><code>positionName</code></td><td><strong>Mandatory field.</strong> <br>Position title (e.g., advisor)</td><td>Text input</td></tr><tr><td><code>firstName</code></td><td><strong>Mandatory field.</strong> <br>Individual's first name.</td><td>Text input</td></tr><tr><td><code>lastName</code></td><td><strong>Mandatory field.</strong> <br>Individual's last name.</td><td>Text input</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Mandatory field.</strong> <br>Individual's date of birth.</td><td>Date picker</td></tr><tr><td><code>contactNumber</code></td><td>Company contact phone number.</td><td>Text input</td></tr><tr><td><code>email</code></td><td>Company contact email address.</td><td>Text input</td></tr></tbody></table>

***

### Review

The **Review** step presents a summary of all collected company and beneficiary data before submission. Applicants can review and edit information if needed.

Example:

```json
{
  "type": "kyb-review",
  "key": "kyb-review",
  "title": {
    "en": "Checking the data",
    "es": "Verificando los datos"
  },
  "description": {
    "en": "Please check the information below to make sure everything is correct",
    "es": "Por favor revise la información a continuación para asegurarse de que todo esté correcto"
  }
}
```

This step allows the applicant to edit the data before submission.

KYB cURL example:

<details>

<summary><em>Expand to view example</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
  "steps": [
        {
          "type": "company",
          "key": "company",
          "title": {
            "en": "Company data"
          },
          "description": {
            "en": "Follow the simple steps below"
          },
          "fields": [
               { "type": "companyName", "mandatory": true },
               { "type": "companyEntityType", "mandatory": false },
               { "type": "registrationNumber", "mandatory": true },
               { "type": "registrationCountry", "mandatory": true },
               { "type": "legalAddress", "mandatory": true },
               { "type": "taxId", "mandatory": false },
               { "type": "dateOfIncorporation", "mandatory": false },
               { "type": "contactNumber", "mandatory": false },
               { "type": "email", "mandatory": false }
          ]
        },
        {
          "type": "beneficiaries",
          "key": "beneficiaries",
          "title": {
            "en": "Beneficiaries"
          },
          "description": {
            "en": "Enter information about the company's beneficiaries"
          },
          "kycConfigId": "687e0ba12cf633bd323cb0db",
          "kybConfigId": "687e0ba12cf633bd323cb0d2",
          "roles": {
            "shareholder": {
              "fields": [
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyName", "mandatory": true },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ],
              "verification": true
            },
            "ubo": {
              "fields": [
                { "type": "ownershipPercentage", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "director": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "representative": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "other": {
              "fields": [
                { "type": "positionName", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            }
          }
        },
        {
          "type": "kyb-review",
          "key": "kyb-review",
          "title": {
            "en": "Checking the data"
          },
          "subtitle": {
            "en": "Please check the information below to make sure everything is correct"
          }
        }
      ]
}'
```

</details>

***

### User questionnaire

The user questionnaire step allows you to collect custom user input as part of the verification flow. It supports various question types and provides multilingual support for titles and descriptions. All responses are saved to the verification session. This step has a slightly different structure compared to other steps.

**User questionnaire step configurations:**

* `type`\
  Must be set to `"user-questionnaire"` to define this step as a user questionnaire block.
* `key` \
  A client-defined unique key for this questionnaire step. It must remain unique within a single session to avoid conflicts.
* `title` \
  The main title of the questionnaire displayed on the user interface.\
  Must always be provided as an \<object> with language codes as keys (e.g., `"en"`), even if only one language is used. This ensures consistency and supports future localization.
* `description` \
  Text displayed beneath the title in the user interface, providing context or instructions.\
  Must always be an \<object> of language codes. Same format and rules as `title`.
* `questions`\
  An \<array> of question objects to be presented to the user.\
  Supported question types include:
  * `string`: **Short answer** – The user enters a short text answer.
  * `multiple-choice`: **Checkboxes** – Allows the user to select one or more options.
  * `options`: **Radio** – The user selects a single option from a list.
  * `dropdown` : **Dropdown List** – The user selects one or more options from a dropdown menu.
  * `file`: **File Upload** – Allows the user to upload a file as a response.
  * `attachment`: **Attachment -** Allows attaching files either dynamically (via API/configuration) or per session. Depending on configuration, files may be pre-attached for the user or uploaded by the operator during the session.
* `successButtonTitle`\
  Defines the label of the confirmation button displayed at the end of the questionnaire.\
  Must also be an \<object> of language codes, even if only one language is used.\
  If any question is marked as `"mandatory": true`, the button will remain disabled until all required questions are answered.

#### **Questions**

Each question in the `questions` array supports a set of parameters that define how it behaves and appears to the user. Here's a breakdown of all supported properties:

* `type`\
  Defines the question type. \
  Supported values:
  * `string` – Short text input
  * `multiple-choice` – Checkbox (multiple selection)
  * `options`– Radio buttons (single selection)
  * `dropdown`– Dropdown menu (single or multi-select)
  * `file`– File upload
  * `attachment` - Attach files and share with the end-user
* `title`\
  A multilingual \<object> representing the question label.\
  Example:

```json
"title": {
  "en": "What is your occupation?",
  "fr": "Quelle est votre profession ?"
}
```

* `key`\
  A **unique identifier** for the question within the same questionnaire. This is client-defined and used for referencing and data mapping.
* `mandatory`\
  Indicates whether the question must be answered before the user can proceed.
  * Value: `true` or `false`
* `answer` \
  Allows you to **preset an answer** for the user.

  * `string`: A plain text string (e.g., `"John Doe"`).
  * `options`: A single option key (e.g., `"opt_a"`).
  * `multiple-choice`: An array of option keys (e.g., `["opt_a", "opt_c"]`).
  * `dropdown`: Not applicable.
  * `file`: Not applicable.
  * `attachment`: An array of file IDs

  *Note: End-users* can modify pre-filled answers unless `readOnly` is enabled.
* `readOnly` \
  Displays the question in a **non-editable** state. Users can view the question and answer but cannot change it.
  * Value: `true` or `false`
* `showConditions` \
  Defines a **conditional display rule** for the question, based on the answer to a previous question.
  * `questionKey`  Key of the controlling question.
  * `answer`  Key of the answer (for radio/checkbox) or specific text (for string)

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

* `multiple`\
  Specific to `dropdown` type.
  * If `true`, the user can select **multiple values** from the dropdown.
  * Value: `true` or `false`

#### **Options**

Options are used exclusively in `multiple-choice` , `options` and `dropdown` type questions. They define the selectable choices that the user can pick from.

Each question that supports options must include the following parameter:

* `options` \
  An \<array> of option objects for the question. Each object must include the following:
* `title`\
  The text label for the option, shown to the user during the verification flow.\
  Must always be provided as an \<object> with language codes as keys, even if only one language is used.\
  This ensures consistency across multilingual flows. \
  Example:

```json
{
  "en": "Self-employed"
}
```

* `key`\
  A unique identifier for the option within the questionnaire.\
  This value is used for referencing in preset answers, conditions, and session data.\
  It must be unique within the same questionnaire to avoid conflicts.

#### **List of parameters with examples:**

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the questionnaire shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "terms-and-conditions"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title of the user questionnaire, displayed as the block title on the user's side. The title can be an &#x3C;object> containing different <strong>languages</strong>, allowing the title to be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title on the user's side. Similar to the title, the description can be an &#x3C;object> containing different <strong>languages</strong>, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>An &#x3C;array>  of questions with the following types: <code>string</code>, <code>multiple-choice</code> , <code>options</code>, <code>dropdown</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        }
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option1"
        },
        { 
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>successButtonTitle</code></td><td>The title of the action button in the questionnaire. If the questions are mandatory, the button is deactivated until the user completes the questionnaire.</td><td>Confirm</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"successButtonTitle": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr></tbody></table>

#### **cURL example:**

<details>

<summary><em>Expand to view user-questionnaire example</em></summary>

<pre class="language-bash"><code class="lang-bash">curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "es"
},
"steps": [
    {
            "key": "questionnaire-page-1",
            "type": "user-questionnaire",
            "title": { 
                "es": "Tu título",
                "en": "Your title"
<strong>                },
</strong>            "description": {
                "es": "Tu descripción",
                "en": "Your description"
                },
            "questions": [
                {
                "type": "string",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question1",
                "mandatory": true
                },
                {
                "type": "multiple-choice",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question2",
                "mandatory": false,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option1"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option2"
                    }
                ],
                "answer": ["option2"],
                "readOnly": true
                },
                {
                "type": "options",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question3",
                "mandatory": true,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option3"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option4"
                    }
                ]
            }
        ]
    }
]
}'
</code></pre>

</details>

#### **Question type: Short answer**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>string</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "string"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "your-address"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>format</code></td><td>Specifies the expected structure of the user’s response. Determines how the input is validated.</td><td><code>free-text</code></td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"format": {
    "type": "free-text"
}
</code></pre><pre class="language-json"><code class="lang-json">"format": {
    "type": "email"
}
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the prefilled answer can be displayed in different languages.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": { 
        "en": "This is a prefilled answer",
        "es":"Esta es una respuesta prellenada."
}
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view SHORT ANSWER question example</em></summary>

```json
"questions": [
    {
        "type": "string",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question1",
        "mandatory": true,
        "answer": {
            "en": "This is a prefilled answer",
            "es": "Esta es una respuesta prellenada."
        },
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
        },
        "readOnly": true
    }
]
```

</details>

***

#### **Question type: Checkbox**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>multiple-choice</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "multiple-choice"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "check-two-answers"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;array> <strong>of option keys</strong> assigned to this question.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": [
    "option-1",
    "option-2"
]
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view CHECKBOX question example</em></summary>

```json
"questions": [
    {
        "type": "multiple-choice",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question2",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": [
                "identity-document",
                "proof-of-address"
            },
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Question type: Radio**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>options</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "options"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-one-answer"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Allows you to preset an answer for a question.<br>The answer is an  &#x3C;string> <strong>of an option key</strong> assigned to this question.</td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": "option-1"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Displays the question but restricts interaction.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view RADIO question example</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question3",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": "identity-document",
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Question type: Dropdown**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>dropdown</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "dropdown"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  &#x3C;object> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p></p><p>An &#x3C;array> of options for the question. Each option may have:</p><ul><li>"<strong>title</strong>" : The title of an option. The title is an &#x3C;object> containing different languages, allowing the option to be displayed in the selected language during the verification flow.</li><li>"<strong>key</strong>": The key for the option, chosen by the client. It must remain unique within a single questionnaire.</li></ul></td><td>-</td><td>&#x3C;array></td><td><p></p><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>multiple</code></td><td><p>Specifies whether the question is single or multiple choice.</p><p></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"multiple": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view DROPDOWN question example</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question4",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "multiple": true,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Question type: File upload**

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>file</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "file"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  <code>&#x3C;object></code> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title. Similar to the title, the description can be an &#x3C;object> containing different languages, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Specifies whether the question is required to be answered.<br></p><p>Possible values:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Specifies the types of files the user is allowed to upload.<br><br>Possible values:<br> <code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><p></p><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Specifies the maximum number of files the user is allowed to upload.<br><br>Possible values:<br>A number from 1 to 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json5" data-overflow="wrap"><code class="lang-json5">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view FILE UPLOAD question example</em></summary>

```json
"questions": [
    {
        "type": "file",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question5",
            "mandatory": true,
            "fileTypes": [
            "pdf",
            "image"
            ],
            "filesMaxCount": 5,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Question type: Attachment**

The **Attachment** question type allows attaching files to a questionnaire. It supports two main use cases:

1. **Operator-added attachments per session**\
   The operator uploads files during or before the verification session and shares them with the end-user.
2. **Predefined attachments from Configuration or API**\
   Files are uploaded in the Configuration interface or dynamically provided via API. These files are automatically included in future sessions.

**Behavior**

* Attachments are visible to both the operator and the end-user.
* When files are provided via API (`answer`) or Configuration, they will appear when the questionnaire is opened.
* Depending on settings, the operator may be allowed or restricted from modifying attachments after the user has confirmed the questionnaire.

Available parameters:&#x20;

<table data-full-width="true"><thead><tr><th width="133">Parameter</th><th width="217">Description</th><th width="100">Default</th><th width="118">Type</th><th>Example</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>attachment</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "attachment"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Keys are chosen by the client and must remain unique within a single session.</p><p>Recommended to use key describing the question shortly. </p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "attached-documents"
</code></pre></td></tr><tr><td><code>title</code></td><td>The title is an  <code>&#x3C;object></code> of languages so that if the user changes the language during the verification flow, the question can be displayed in different languages. There are no length or symbol restrictions.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>A description that appears below the title. Similar to the title, the description can be an &#x3C;object> containing different languages, so that it can be displayed in the selected language during the verification flow.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Specifies the types of files the user is allowed to upload.<br><br>Possible values:<br> <code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><p></p><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Specifies the maximum number of files the user is allowed to upload.<br><br>Possible values:<br>A number from 1 to 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>This parameter may be used to set conditions for whether a question should be displayed.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>allowOperatorUpload</code></td><td>Controls how files are added:<br>• <strong>true</strong> – operator uploads files per session.<br>• <strong>false</strong> – files are provided via Configuration or API only.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorUpload": true
</code></pre></td></tr><tr><td><code>allowOperatorOverride</code></td><td>If <strong>false</strong>, the operator cannot edit attachments after the user confirms the questionnaire. <br>If <strong>true</strong>, the operator may still upload or remove files.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorOverride": true
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Expand to view ATTACHMENT question example</em></summary>

```json
"questions": [
    {
        "type": "attachment",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "description": {
            "es": "Tu descripción",
            "en": "Your description"
            },
        "key": "question5",
        "fileTypes": [
            "pdf",
            "image"
            ],
        "filesMaxCount": 5,
        "allowOperatorUpload": true,
        "allowOperatorOverride": true,
        "answer": [ ],
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
            }
        }
    ]
```

</details>


# API reference

The API Reference documentation provides detailed information on the available endpoints, request parameters, response formats, and authentication methods for integrating with Identomat.

### Rate limit

To protect system stability and prevent abuse, our API enforces rate limiting:

* **Limit**: Maximum of **600 requests per minute** per IP address.
* **Exceeding the limit**: If an IP exceeds this threshold, it will be **temporarily blocked for 1 hour**.
* **Error response**: During the block period, all requests from the blocked IP will return a **`529 Too many requests`** error.

***

### Session management

Use these endpoints to create and manage verification sessions. Sessions can be started using a saved configuration (recommended) or with custom steps and flags.

<details>

<summary>begin/ - Session creation (Legacy)</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/begin/></mark>

**Description:**

Initiates a new verification session. Sessions can be started using either a predefined configuration (`config_id`) or by explicitly specifying the steps and flags for a custom flow.

This endpoint now also supports **overriding individual steps within a configuration**. This allows you to inject dynamic data (e.g., prefill user details like first name and last name) while still using your saved configuration, making the transition to configuration-based setups more flexible.

**Parameters:**

* `company_key` *(string, required)*- The company's secret key.
* `parent_session_id` *(string, optional)* – Specifies the parent session ID when creating a child session for multi-participant verification.

with:

* `config_id` (string, optional) - The unique identifier for the session configuration.

or:&#x20;

* `flags` *(object, optional)* – A JSON object containing session customization options.
* `steps` *(array, optional)* – Defines the sequence of steps in the identification process.

{% hint style="warning" %}
Only use custom steps and flags if you have very specific needs that cannot be satisfied with configurations. Over time, **we encourage migrating all custom flows to configurations.**<br>

**Why configurations matter:**

* **Simplifies session creation** — no need to manually define steps and flags.
* **Reduces risk of errors** in the verification flow.
* **Future-proof** — legacy custom step handling will eventually be deprecated.
* Enables Identomat to **maintain**, **improve**, and **optimize** **flows** efficiently.
* Makes **integration** easier.
  {% endhint %}

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/begin/ \
    -F 'company_key=your-company-secret-key' \
    -F 'config_id=62412c096c4b39ba845d4bf2'
```

Check all **steps** examples in [Developer guide](/developer-tools/developer-guide).

**Request parameter examples:**

*Start default session:*

```json
{
  "company_key": "your-company-secret-key"
}
```

*Start session with configuration **(recommended)**:*

```json
{
  "company_key": "your-company-secret-key",
  "config_id": "62412c096c4b39ba845d4bf2"
}
```

*Start session with flags and steps:*

```json
{
  "company_key": "your-company-secret-key",
  "flags": {},
  "steps": [],
  "parent_session_id": "98aryxvvzwpi4zuasth332ozfucli3l0qx13hisc"
}
```

**Result examples:**

*default:*

```json
"47fjzxvvzapi4ztasth3c2ozfucli3l0qx13hisc"
```

***

#### Overriding configuration behavior

When creating a session with `config_id`, you can selectively override parts of the saved configuration at runtime. This allows you to keep configurations reusable while adjusting behavior per session.

There are **two supported override types**:

**1. Override configuration steps**

You can redefine one or more steps from the configuration by passing the `steps` array in the `/begin` request.

Only the steps explicitly provided in the request will be overridden. All other steps from the configuration remain unchanged.&#x20;

Steps are matched by their `key`. If a step with the same `key` already exists in the configuration, it will be **overridden** by the step definition provided in the request.

This is commonly used to:

* Prefill questionnaire answers (e.g. name, agreement)
* Adjust step content dynamically
* Inject user-specific data into predefined flows

> If both `config_id` and `steps` are provided, the configuration is used as the base and **only matching steps are overridden**.

*Example:*

{% code expandable="true" %}

```json
{
    "company_key": "your-company-secret-key",
    "config_id": "62412c096c4b39ba845d4bf2",
    "steps": [
        {
            "type": "user-questionnaire",
            "key": "agreement",
            "title": {
                "en": "Personal information"
            },
            "questions": [
                {
                    "mandatory": true,
                    "type": "string",
                    "key": "agreement-1",
                    "title": {
                        "en": "Your full name"
                    },
                    "answer": "John Doe"
                }
            ],
            "successButtonTitle": {
                "en": "Continue"
            }
        }
    ]
}
```

{% endcode %}

**2. Override configuration parameters (general)**

You can override configuration-level parameters by passing them via the `general` object in the `/begin` request.

Any parameter provided in `general` will **override the corresponding value from the configuration** for that session only. Parameters not provided will fall back to the configuration defaults.

Example parameters that can be overridden include:\
*(See* [*Configuration settings*](/no-code-workflows/configuration-settings) *for the full list and detailed descriptions of all available parameters)*

```json
{
  "language": "en",                                //Default language
  "returnUrl": "https://www.identomat.com/",       //Return URL
  "optionalContinueOnAnotherDevice": false,        //Allow user to continue on another device
  "restrictUrlSharing": false,                     //Restrict URL sharing
  "switchDeviceUrl": "https://www.identomat.com/", //Pass custom QR URL 
  "skipDesktop": false,                            //Force user to continue on mobile device
  "useSmsNotifications": false,                    //Enable SMS notifications 
  "sessionLifetime": "15",                         //Session lifetime (minutes)
  "identifyPersonWithFace": false,                 //Recurring face recognition 
  "checkScreening": true,                          //Screening 
  "minScreeningScore": "85",                       //Minimum screening score
  "screeningDatasets": ["default"],                //Screening Datasets
  "runScreeningAfter": "completion",               //When to run screening
  "groups": ["667eb394d3ae73e1902da6dd"],          //Groups with access
  "requiredHdMedia": false                         //Require FHD camera
}
```

Example request using parameter overrides:

```json
{
  "company_key": "your-company-secret-key",
  "config_id": "62412c096c4b39ba845d4bf2",
  "general": {
    "language": "ka",
    "useSmsNotifications": true,
    "sessionLifetime": "20"
  }
}
```

> Parameter overrides apply **only to the created session** and do not modify the saved configuration.

</details>

<details>

<summary>begin/ - Session creation (New, Additional information request support )</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/begin></mark>

**Description:**

Creates a new verification session using the External API. Unlike the legacy endpoint, this endpoint uses **camelCase** parameter names and supports configurations with [**Additional information request**](/platform-concepts/additional-information-requests) enabled.

When called with a configuration that has `additionalInformationRequest` set to `true`, the endpoint automatically provisions a parent session (operator-facing) and a child session (applicant-facing), returning both in the response.

> For new integrations, this endpoint is recommended over the legacy `begin/` endpoint.

**Parameters:**

* `companyKey` *(string, required)* – The company's secret key.
* `configId` *(string, optional)* – The unique identifier for the session configuration.
* `parentSessionId` *(string, optional)* – Specifies the parent session ID when creating a child session for multi-participant verification.
* `name` *(string, optional)* – A custom name for the session.
* `scheduleStartTime` *(string, optional, ISO 8601)* – The scheduled start time for the session.
* `scheduleEndTime` *(string, optional, ISO 8601)* – The scheduled end time for the session.
* `groupId` *(string, optional)* – Assigns the session to a specific group.
* `createdByUser` *(string, optional)* – The ID of the user creating the session.
* `clientUserId` *(string, optional)* – A custom identifier for the applicant on your side, useful for linking sessions to your internal user records.
* `general` *(object, optional)* – Overrides configuration-level parameters for this session only. See [Configuration settings ](/no-code-workflows/configuration-settings)for the full list of available parameters.
* `flags` *(object, optional)* – A JSON object containing session customization options.
* `steps` *(array, optional)* – Defines or overrides the sequence of steps in the verification flow. If used together with `configId`, only matching steps are overridden.

Check all **steps** examples in [Developer guide](/developer-tools/developer-guide).

{% hint style="warning" %}
Only use custom steps and flags if you have very specific needs that cannot be satisfied with configurations. Over time, **we encourage migrating all custom flows to configurations.**<br>

**Why configurations matter:**

* **Simplifies session creation** — no need to manually define steps and flags.
* **Reduces risk of errors** in the verification flow.
* **Future-proof** — legacy custom step handling will eventually be deprecated.
* Enables Identomat to **maintain**, **improve**, and **optimize** **flows** efficiently.
* Makes **integration** easier.
  {% endhint %}

***

**cURL example:**

```bash
curl -X POST https://external-api.identomat.com/begin \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "configId": "62412c096c4b39ba845d4bf2"
    }'
```

***

**Request parameter examples:**

*Create standard session:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2"
}
```

*Create session with Additional information request:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2"
}
```

*Request additional information for existing session:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2",
  "sessionId": "parent-session-id"
}
```

When `sessionId` is provided, the parent session remains unchanged. **Only a new child session is created**, with a fresh applicant-facing URL. Always share the latest `additionalSessionUrl` with the applicant.

***

**Result examples:**

*Standard configuration:*

```json
{
  "id": "session-id",
  "url": "https://widget.identomat.com/?session_token=session-id"
}
```

*Configuration with `additionalInformationRequest` enabled:*

```json
{
  "id": "parent-session-id",
  "url": "https://widget.identomat.com/?session_token=child-session-id",
  "additionalSessionId": "child-session-id",
  "additionalSessionUrl": "https://widget.identomat.com/?session_token=child-session-id"
}
```

***

**Response fields:**

<table><thead><tr><th width="199.55859375">Field</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>The parent session ID. Use this to track the session in Manage and receive callbacks.</td></tr><tr><td><code>url</code></td><td>The applicant-facing URL for the child session. Mirrors <code>additionalSessionUrl</code> for backwards compatibility. </td></tr><tr><td><code>additionalSessionId</code></td><td>The child session ID. Only present when <code>additionalInformationRequest</code> is enabled on the configuration.</td></tr><tr><td><code>additionalSessionUrl</code></td><td>The applicant-facing URL for the child session. Only present when <code>additionalInformationRequest</code> is enabled on the configuration.</td></tr></tbody></table>

</details>

<details>

<summary>result/ - <strong>KYC (Customer)</strong> session result</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/></mark>

\
**Description:**

This endpoint allows you to retrieve the result of a verification session. Based on the session ID, the response will return the final decision (approved/rejected), document data, extracted information, and metadata.

**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
 curl https://widget.identomat.com/external-api/result/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Request parameter examples:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "example-session-id-12345"
}
```

***

#### 📹 **videoCallStatus:**

If the session included a **video call step**, the `/result` endpoint will include a `videoCallStatus` array.\
This allows clients to track the lifecycle of each video call room — when it was created, when it ended, and when the composed video file becomes available.

**Example:**

```json
"videoCallStatus": [
  {
    "roomId": "RM27b1b047ccc30c0519959d66b4f0689d",
    "roomStatus": "ended",
    "compositionStatus": "available",
    "videoFileStatus": "available",
    "videoFileId": "hlwXVfonxNogXujgqT9anl1EphgwNiXuy7ug96sH"
  }
]
```

**Object structure:**

Each entry in `videoCallStatus` follows this scheme:

```json
{
  "roomId": "string",
  "roomStatus": "created | ended | empty",
  "compositionStatus": "null | started | available",
  "videoFileStatus": "null | started | available",
  "videoFileId": "null | string"
}
```

**Status descriptions:**

<table><thead><tr><th width="169.7734375">Field</th><th width="133.3046875">Possible values</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>roomStatus</strong></td><td><code>created</code></td><td>Room successfully created; call is in progress.</td></tr><tr><td></td><td><code>ended</code></td><td>Operator ended the call.</td></tr><tr><td></td><td><code>empty</code></td><td>The video call room ended with no media recorded.</td></tr><tr><td><strong>compositionStatus</strong></td><td><code>null</code></td><td>Composition not started yet.</td></tr><tr><td></td><td><code>started</code></td><td>Composition (video merging) has started.</td></tr><tr><td></td><td><code>available</code></td><td>Composed full video is ready.</td></tr><tr><td><strong>videoFileStatus</strong></td><td><code>null</code></td><td>Final video file has not been generated yet.</td></tr><tr><td></td><td><code>started</code></td><td>Video file generation has started.</td></tr><tr><td></td><td><code>available</code></td><td>Final downloadable video file is ready.</td></tr><tr><td><strong>videoFileId</strong></td><td><code>null</code> or File ID</td><td>If available, this ID can be used to download the composed video.</td></tr></tbody></table>

***

#### **Result examples:**

*<mark style="color:green;">sessionApproved:</mark>*

{% code expandable="true" %}

```json
{
    "result": "approved",
    "similarity": 0.9027283530404249,
    "live": false,
    "document_type": "id",
    "generalDocuments": [
        {
            "pages": [
                {
                    "typeId": "utility-bill",
                    "final": {
                        "street": "Main Street",
                        "state": "California",
                        "city": "Los Angeles",
                        "country": "United States",
                        "postalCode": "90001",
                        "streetNumber": "123",
                        "county": "Los Angeles County",
                        "countryCode": "USA",
                        "documentIssued": "1/15/2025",
                        "documentIssuedTime": "2025-01-15T00:00:00",
                        "authority": "Bank of America, NA",
                        "address": "123 Main St, Los Angeles, CA 90001",
                        "formattedAddress": "123 Main St, Los Angeles, CA 90001, USA",
                        "latitude": 34.052235,
                        "longitude": -118.243683,
                        "fullName": "John Doe",
                        "firstName": "John",
                        "lastName": "Doe",
                        "permanent": null
                    },
                    "documentPages": [
                        {
                            "pageNumber": 1
                        }
                    ],
                    "pageNumber": 1,
                    "statuses": []
                }
            ],
            "documentType": "UTILITY_BILL",
            "permanent": null,
            "typeId": "utility_bill"
        }
    ],
    "reject_reason": {
        "value": "",
        "description": ""
    },
    "result_comment": "",
    "name": "John Doe",
    "face_images": 1,
    "id_card_front": {
        "Given_Names_en_US": "John",
        "Surname_en_US": "Doe",
        "citizenship": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "123456789",
        "Date_of_Birth_en_US": "1/8/1980",
        "Date_of_Expiry_en_US": "8/9/2025",
        "Document_Number_en_US": "AB1234567",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-08T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2025-08-09T00:00:00.000Z"
    },
    "id_card_back": {
        "Date_of_Issue_en_US": "6/28/2021",
        "Issuing_State_Code_en_US": "USA",
        "Place_of_Birth_en_US": "USA",
        "Date_of_Issued_ISO": "2021-06-28T00:00:00.000Z",
        "Given_Names_en_US": "John",
        "Surname_en_US": "Doe",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "123456789",
        "Date_of_Birth_en_US": "1/8/1980",
        "Date_of_Expiry_en_US": "6/28/2028",
        "Document_Number_en_US": "AB0002261",
        "Nationality_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-08T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2028-06-28T00:00:00.000Z",
        "mrz": "IDUSAAB0002261938001085718<<<<\n8001081M2806288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<"
    },
    "suggested": {},
    "person": {
        "email": "johndoe@email.com",
        "phoneNumber": "+1234567890",
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "1/8/1980",
        "birthday_time": "1980-01-08T00:00:00.000Z",
        "age": 45,
        "citizenship": "USA",
        "document_number": "AB0002261",
        "document_expires": "6/28/2028",
        "document_expires_time": "2028-06-28T00:00:00.000Z",
        "personal_number": "123456789",
        "issuing_state": "USA",
        "sex": "M",
        "birth_place": "USA",
        "nationality": "USA",
        "document_issued": "6/28/2021",
        "document_issued_time": "2021-06-28T00:00:00.000Z",
        "status": "FIELDS_MATCH",
        "mrz": "IDUSAAB0002261938001085718<<<<\n8001081M2806288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<",
        "address": "2804 Fairway Dr, Cedar Hill, TX 75104, USA"
    },
    "questionnaires": [
        {
            "key": "agreement",
            "questions": [
                {
                    "key": "question1",
                    "answer": "John Doe"
                },
                {
                    "key": "question2",
                    "answer": "option4"
                },
                {
                    "key": "question3",
                    "answer": [
                        "option1",
                        "option2"
                    ]
                },
                {
                    "key": "question5",
                    "answer": 1
                },
                {
                    "key": "question6",
                    "answer": "readOnly answer"
                }
            ]
        }
    ],
    "geolocation": [
        {
            "key": "require_geolocation",
            "latitude": 34.05221168293059,
            "longitude": -118.24393094417908,
            "address": "123 Main St, Los Angeles, CA 90001, USA"
        }
    ],
    "technicalDetails": {
        "remoteAddress": "192.168.1.1",
        "userAgent": "PostmanRuntime/7.37.3",
        "countryCode": "US"
    },
    "videoCallStatus": [
        {
            "roomId": "RMf12391ce20597708d747587bdee8e715",
            "roomStatus": "ended",
            "compositionStatus": "available",
            "videoFileStatus": "available",
            "videoFileId": "av7YsrnDopwVmyzLtzkPKSiyWKVIaQDQZPtDfEq0"
        },
        {
            "roomId": "RM48170f8ee1235e27d5d09f8330b4f67f",
            "roomStatus": "empty",
            "compositionStatus": null,
            "videoFileStatus": null,
            "videoFileId": null
        }
    ]
}
```

{% endcode %}

*<mark style="color:red;">sessionRejected:</mark>*

{% code expandable="true" %}

```json
{
    "result": "rejected",
    "similarity": 0.59931052549619,
    "live": true,
    "document_type": "id",
    "generalDocuments": [
        {
            "pages": [
                {
                    "typeId": "utility-bill",
                    "final": {
                        "street": "Main Street",
                        "state": "California",
                        "city": "Los Angeles",
                        "country": "United States",
                        "postalCode": "90001",
                        "streetNumber": "123",
                        "county": "Los Angeles County",
                        "countryCode": "USA",
                        "documentIssued": "1/15/2025",
                        "documentIssuedTime": "2025-01-15T00:00:00",
                        "authority": "Bank of America, NA",
                        "address": "123 Main St, Los Angeles, CA 90001",
                        "formattedAddress": "123 Main St, Los Angeles, CA 90001, USA",
                        "latitude": 34.052235,
                        "longitude": -118.243683,
                        "fullName": "John Doe",
                        "firstName": "John",
                        "lastName": "Doe",
                        "permanent": null
                    },
                    "documentPages": [
                        {
                            "pageNumber": 1
                        }
                    ],
                    "pageNumber": 1,
                    "statuses": []
                }
            ],
            "documentType": "UTILITY_BILL",
            "permanent": null,
            "typeId": "utility_bill"
        }
    ],
    "reject_reason": {
        "value": "low_similarity",
        "description": "Low similarity"
    },
    "result_comment": "",
    "name": "John Doe",
    "errors": [
        "LOW_SIMILARITY"
    ],
    "face_images": 1,
    "id_card_front": {
        "Given_Names_en_US": "James",
        "Surname_en_US": "Smith",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1980",
        "Date_of_Issue_en_US": "5/30/2015",
        "Document_Number_en_US": "A12345678",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-01T00:00:00.000Z",
        "Date_of_Issued_ISO": "2015-05-30T00:00:00.000Z"
    },
    "id_card_back": {
        "Issuing_State_Code_en_US": "USA",
        "Authority_en_US": "Department of State",
        "Given_Names_en_US": "James",
        "Surname_en_US": "Smith",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1980",
        "Date_of_Expiry_en_US": "5/30/2025",
        "Document_Number_en_US": "A12345678",
        "Nationality_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2025-05-30T00:00:00.000Z",
        "mrz": "I<USA12345678<<<<<<<<<<<<<<<\n8001013M2505309USA<<<<<<<<<<<2\nSMITH<<JAMES<<<<<<<<<<<<<<<<<"
    },
    "suggested": {},
    "person": {
        "email": "johndoe@email.com",
        "phoneNumber": "+1234567890",
        "first_name": "James",
        "last_name": "Smith",
        "birthday": "1/1/1980",
        "birthday_time": "1980-01-01T00:00:00.000Z",
        "age": 45,
        "nationality": "USA",
        "document_number": "A12345678",
        "document_issued": "5/30/2015",
        "document_issued_time": "2015-05-30T00:00:00.000Z",
        "issuing_state": "USA",
        "sex": "M",
        "document_expires": "5/30/2025",
        "document_expires_time": "2025-05-30T00:00:00.000Z",
        "authority": "Department of State",
        "status": "FIELDS_MATCH",
        "mrz": "I<USA12345678<<<<<<<<<<<<<<<\n8001013M2505309USA<<<<<<<<<<<2\nSMITH<<JAMES<<<<<<<<<<<<<<<<<",
        "address": "123 Main St, Los Angeles, CA 90001, USA"
    },
    "questionnaires": [
        {
            "key": "agreement",
            "questions": [
                {
                    "key": "question1",
                    "answer": "John Doe"
                },
                {
                    "key": "question2",
                    "answer": "option4"
                },
                {
                    "key": "question3",
                    "answer": [
                        "option1",
                        "option2"
                    ]
                },
                {
                    "key": "question5",
                    "answer": 1
                },
                {
                    "key": "question6",
                    "answer": "readOnly answer"
                }
            ]
        }
    ],
    "geolocation": [
        {
            "key": "require_geolocation",
            "latitude": 34.05221168293059,
            "longitude": -118.24393094417908,
            "address": "123 Main St, Los Angeles, CA 90001, USA"
        }
    ],
    "technicalDetails": {
        "remoteAddress": "192.168.1.1",
        "userAgent": "PostmanRuntime/7.37.3",
        "countryCode": "US"
    },
    "videoCallStatus": [
        {
            "roomId": "RMf12391ce20597708d747587bdee8e715",
            "roomStatus": "ended",
            "compositionStatus": "available",
            "videoFileStatus": "available",
            "videoFileId": "av7YsrnDopwVmyzLtzkPKSiyWKVIaQDQZPtDfEq0"
        },
        {
            "roomId": "RM48170f8ee1235e27d5d09f8330b4f67f",
            "roomStatus": "empty",
            "compositionStatus": null,
            "videoFileStatus": null,
            "videoFileId": null
        }

}
```

{% endcode %}

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/ - <strong>KYB (Business)</strong> session result</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/result></mark>

\
**Description:**

Use this endpoint to retrieve the result of a **KYB (business verification)** session.

> This endpoint uses the newer `external-api.identomat.com` base URL and camelCase parameter names, unlike the legacy KYC endpoint.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
 curl https://external-api.identomat.com/result/ \
    -F 'companyKey={your-company-secret-key}' \
    -F 'sessionId={example-session-id-12345}'
```

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

***

#### **Response structure**

KYB results are returned under a `result.stepsResults` array. Each entry corresponds to a step in the KYB flow.

<table><thead><tr><th width="174.73828125">Step type</th><th>Description</th></tr></thead><tbody><tr><td><code>company</code></td><td>Company information submitted in the flow.</td></tr><tr><td><code>beneficiaries</code></td><td>List of UBOs and representatives (individuals or companies). Each individual beneficiary includes a KYC <code>sessionId</code> that can be queried via the KYC endpoint.</td></tr><tr><td><code>kyb-review</code></td><td>Final review status and trusted database data.</td></tr></tbody></table>

#### **Result example:**

*default:*&#x20;

{% code expandable="true" %}

```json
{
  "result": {
    "stepsResults": [
      {
        "key": "company",
        "type": "company",
        "result": {
          "companyName": "Acme Corp",
          "registrationNumber": "0000000000000",
          "registrationCountry": "United States",
          "taxId": "00000000",
          "dateOfIncorporation": "01/01/2010",
          "email": "contact@acme.com",
          "contactNumber": "+10000000000",
          "website": "www.acme.com",
          "companyEntityType": "Joint-stock company",
          "legalAddress": "123 Main Street",
          "countryCode": "US"
        },
        "status": "approved"
      },
      {
        "key": "beneficiaries-1",
        "type": "beneficiaries",
        "result": [
          {
            "entityType": "individual",
            "positions": ["shareholder", "representative"],
            "firstName": "John",
            "lastName": "Doe",
            "dateOfBirth": "01/01/1980",
            "ownershipPercentage": "25",
            "contactNumber": "+10000000000",
            "email": "john.doe@example.com",
            "sessionIds": ["example-kyc-session-id-0001"],
            "sessionUrl": "https://widget.identomat.com/?session_token=example-kyc-session-id-0001",
            "_id": "example-internal-id-0001"
          },
          {
            "entityType": "company",
            "positions": ["shareholder"],
            "companyName": "Partner Ltd",
            "registrationNumber": "000000000",
            "registrationCountry": "United Kingdom",
            "ownershipPercentage": "50",
            "contactNumber": "+44000000000",
            "email": "contact@partnerltd.com",
            "taxId": "000000000",
            "website": "www.partnerltd.com",
            "dateOfIncorporation": "01/01/2015",
            "sessionIds": ["example-kyc-session-id-0002"],
            "sessionUrl": "https://widget.identomat.com/?session_token=example-kyc-session-id-0002",
            "_id": "example-internal-id-0002"
          }
        ],
        "status": "approved"
      },
      {
        "key": "kyb-review",
        "type": "kyb-review",
        "status": "approved",
        "trustedDatabase": {
          "activityStatus": "ACTIVE",
          "companyName": "Acme Corp",
          "address": {
            "registeredOffice": {
              "streetName": "Main Street",
              "town": "New York",
              "zipCode": "10001"
            }
          },
          "lastUpdateTimestamp": 1777447248,
          "balanceSheets": {
            "last": {
              "year": 2023,
              "balanceSheetDate": "2023-12-31",
              "employees": 42,
              "netWorth": 500000.00,
              "totalAssets": 1200000.00
            },
            "all": [
              {
                "year": 2023,
                "balanceSheetDate": "2023-12-31",
                "employees": 42,
                "netWorth": 500000.00,
                "operatingRevenue": 800000.00,
                "equity": 360000.00,
                "totalAssets": 1200000.00
              },
              {
                "year": 2022,
                "balanceSheetDate": "2022-12-31",
                "employees": 38,
                "netWorth": 450000.00,
                "operatingRevenue": 750000.00,
                "equity": 320000.00,
                "totalAssets": 900000.00
              }
            ]
          }
        }
      }
    ],
    "technicalDetails": {
      "remoteAddress": "192.168.1.1",
      "userAgent": "Mozilla/5.0",
      "countryCode": "US"
    }
  }
}
```

{% endcode %}

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>delete/ - Session data deletion</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/delete/></mark>

**Description:**

This endpoint allows you to permanently delete data related to a specific verification session. This operation is irreversible and should be used with caution. It is typically used to comply with data retention policies or user data deletion requests.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/delete/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={some_session_token}'
```

**Request parameter examples:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "defg"
}
```

**Result examples:**

*default:*

```json
true
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>export-session-as-pdf - Export session</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/export-session-as-pdf></mark>

**Description:**

This endpoint allows you to export data related to a specific session as a downloadable PDF document. You can choose to include the full session details, screening results, and/or proof of address documents. At least one export option must be set to `true`.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

One of the following parameters must be set to `true` for the operation to proceed:

* `exportSession` *(boolean, optional)* – Indicates whether to export the full session data.
* `exportScreening` *(boolean, optional)* – Specifies whether to include screening results in the export.
* `exportProofOfAddress` *(boolean, optional)* - Determines whether to include proof of address documents in the export.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/export-session-as-pdf \    
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "exportSession": true,
  "exportScreening": false,
  "exportProofOfAddress": false
}
```

**Result examples:**

*default:*

```json
PDF document of session
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

### Accessing data and more

Use these endpoints to retrieve media and metadata associated with a verification session. This includes document images, face captures, liveness video, proof of address documents, session activity logs, statistical summaries, and visual document markers.

<details>

<summary>result/card-front/ - Card front side image</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/card-front/></mark>

**Description:**

This endpoint returns the front image of the identification document submitted during the session.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/card-front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples:**

*default:*

```
Card front side image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/card-back/ - Card back side image</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/card-back/></mark>

**Description:**

This endpoint returns the back image of the identification document submitted during the session.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/card-back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples:**

*default:*

```
Card back side image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/passport/ - Passport photo page image</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/passport/></mark>

**Description:**

This endpoint returns the image of the passport submitted during the session.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/passport/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples:**

*default:*

```
Passport image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face/ - Face image</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/face/></mark>

**Description:**

This endpoint returns the image of the user’s face captured during the verification session.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/face/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples**:

*default:*

```
Face image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face-video/ - Face motion video</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/face-video/></mark>

**Description:**

This endpoint returns the video used during the liveness of the identity verification process.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/face-video/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples:**

*default:*

```
Face video
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face-document/ - Selfie with ID</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/face-document/></mark>

**Description:**

This endpoint provides the image where the user holds their ID document next to their face.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/face-document/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Result examples:**

*default:*

```
Selfie with ID (image)
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/general-document/ - Proof of Address image or PDF</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/result/general-document/></mark>

**Description:**

This endpoint returns a proof of address document or other general documents submitted during the session, such as a bank statement, utility bill, or driver's license.

\
**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `session_token` *(string, required)* - The unique identifier of the session.
* `typeId` *(string, required)* – The document type identifier. Valid values include:
  * `bank-statement`
  * &#x20;`utility-bill`
  * `vehicle-registration-certificate-front`
  * `vehicle-registration-certificate-back`&#x20;
  * `drivers-license`

**cURL example:**

```bash
curl https://widget.identomat.com/external-api/result/general-document/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}' \
    -F 'typeId={example-type-id}'
```

**Request parameter examples:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "defg",
  "typeId": "bank-statement"
}
```

**Result examples:**

*default:*

```
Image or PDF of document
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-session-main-document-face-photo - Get face photo from main document</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-session-main-document-face-photo></mark>

**Description:**

This endpoint allows you to retrieve the face photo from the main document associated with a specific session.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-session-main-document-face-photo \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```json
{
  "result": "data:text/plain;base64String"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*notFound:*

```json
{  
    "argumentError": "face-photo-not-found"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>list-session-activities - List of session activities</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/list-session-activities></mark>

**Description:**

This endpoint retrieves a list of activities related to a specific session.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-session-activities \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```json
{
  "result": [
    {
      "id": "6162636465666768696a6b6c",
      "type": "PAGE_LOADED",
      "time": "2021-12-29T11:30:39.086Z",
      "data": {}
    },
    {
      "id": "5ff45878f44e95bbf987a801",
      "type": "PAGE_LOADED",
      "time": "2011-12-29T11:30:39.086Z",
      "data": {}
    }
  ]
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-session-statistical-summary - Session statistical summary</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-session-statistical-summary></mark>

**Description:**

This endpoint retrieves a statistical summary of a session, providing key metrics and insights.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl -X POST https://external-api.identomat.com/get-session-statistical-summary \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"}'
```

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```json
{
  "result": [
    {
      "sessionStartDate": "2021-12-29T11:30:40.000Z",
      "sessionTimeSpan": 8000,
      "scanDocumentStartTime": "2021-12-29T11:30:41.000Z",
      "scanDocumentEndTime": "2021-12-29T11:30:43.000Z",
      "scanDocumentAttempts": 1,
      "scanDocumentFailReason": null,
      "livenessStartTime": "2021-12-29T11:30:45.000Z",
      "livenessEndTime": "2021-12-29T11:30:48.000Z",
      "livenessFailReasons": null,
      "sessionTerminationStep": null,
      "sessionTerminationReasons": null
    }
  ]
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-visual-markers - Get document visual markers</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-visual-markers></mark>

**Description:**

This endpoint retrieves the visual markers from a document.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

```bash
curl -X POST 'https://external-api.identomat.com/get-visual-markers' \
    -H 'Content-Type: application/json' \
    -d '{
    "companyKey": "your-company-secret-key",
    "sessionId": "example-session-id-12345"
}'
```

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```json
{
  "result": "data:application/x-tar;base64,base64String"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

### AML Screening

Use these endpoints to search global screening databases for sanctions, PEPs, regulatory actions, and other risk indicators. You can perform one-off searches, retrieve detailed profiles, and set up ongoing monitoring for individuals so you are alerted when their screening status changes.

<details>

<summary>search-screening-person - Search for a person in screening databases</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/search-screening-person></mark>

**Description:**

Use this endpoint to search for individuals in global screening databases including sanctions, PEPs (Politically Exposed Persons), regulatory actions, and more.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `query` *(object, required)* – The parameters for querying the database.
  * `fullName` *(string, required)* – Full name of the individual.
  * `birthdayTimeFrom` *(string, optional)* – The start date and time of the birthday range in ISO 8601 format.
  * `scoreThreshold` *(integer, required)* – The minimum score required for the query results.
* `offset` *(integer, optional)* – The number of items to skip from the beginning of the results.
* `limit` *(integer, optional)* – The maximum number of items to return in the query results.

**Entities glossary:**

* **`Sanctioned entity`**: Companies, individuals, or other entities that have been designated by a government to prohibit specific interactions with them.
* **`Sanction-linked entity`**: Entities, including companies and individuals, that have a direct relationship with a sanctioned entity. This also includes companies that are indirect subsidiaries of sanctioned entities, regardless of the percentage ownership held by the sanctioned entity.
* **`Counter-sanctioned entity`**: Entities listed on sanctions lists from non-democratic countries, often targeting pro-democracy activists, journalists, and human rights advocates.
* **`Debarred entity`**: Companies or individuals that have been excluded from public procurement, typically due to committing fraud in the execution of a government contract.
* **`Politician (Politically Exposed Persons)`**: Individuals who currently or previously held a position of political influence.
* **`Close associate`**: Family members and key business associates of politically exposed persons (PEPs). These individuals are often used as nominees or front-people to hide illicit financial gains.
* **`Person of Interest`**: Individuals under scrutiny due to public interest, who do not meet the common definitions of politically-exposed persons and are not sanctioned.
* **`Regulator action`**: Companies that have been subject to enforcement action by an industry regulatory body.
* **`Regulator warning`**: Companies that have been placed on a warning or alert list by an industry regulatory body.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/search-screening-person \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "query":
            {
            "birthdayTimeFrom":"1980-11-07T13:07:59.790Z",
            "fullName":"John Doe",
            "scoreThreshold":80
            },
        "offset":0,
        "limit":100
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "query": {
    "birthdayTimeFrom": "1980-11-07T13:07:59.790Z",
    "fullName": "John Doe",
    "scoreThreshold": 80
  },
  "offset": 0,
  "limit": 100
}
```

**Result examples:**

*default - no results for person:*

```json
{
    "result": []
}
```

*default - person found:*

```json
{
    "result": [
        {
            "score": 100,
            "name": "John Doe",
            "personId": "67137933a2176f0797f1e657",
            "entityType": "person",
            "topics": [
                "Sanctioned entity",
                "Wanted person",
                "Person of interest",
                "Politician"
            ]
        }
    ]
}
```

*companyMissing:*

```json
{
  "argumentError": "company-missing"
}
```

*accessDenied:*

```json
{
  "argumentError": "access-denied"
}
```

</details>

<details>

<summary>get-screening-person-details - Get person details from screening databases</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-screening-person-details></mark><br>

**Description:**

Retrieve extended profile data, positions, aliases, sanctions, and other metadata for a specific individual listed in screening databases.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `personId` *(string, required)* – The unique identifier for the person.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-screening-person-details \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "personId":"example-person-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "personId": "example-person-id-12345"
}
```

**Result examples:**

*default:*

{% code expandable="true" %}

```json
{
    "result": {
        "entityType": "person",
        "firstName": "John",
        "middleName": "Doe",
        "lastName": "Smith",
        "gender": "male",
        "birthdayTime": "1952-10-07",
        "nationality": "US",
        "extraDetails": [
            {
                "groupName": "Profile",
                "details": [
                    {
                        "detailName": "John Doe Smith",
                        "properties": [
                            {
                                "propertyName": "Position",
                                "value": [
                                    "President of US (2012-)",
                                    "chairperson",
                                    "party leader"
                                ],
                                "type": "list"
                            },
                            {
                                "propertyName": "Name",
                                "value": [
                                    "John Doe Smith",
                                    "约翰·多·史密斯",
                                    "Джон Доу Сміт",
                                    {
                                        "propertyName": "Alias",
                                        "value": [
                                            "John Smith"
                                        ],
                                        "type": "list"
                                    },
                                    {
                                        "groupName": "Position occupied",
                                        "details": [
                                            {
                                                "detailName": "President",
                                                "properties": [
                                                    {
                                                        "propertyName": "Name",
                                                        "value": [
                                                            "President of US",
                                                            "President"
                                                        ],
                                                        "type": "string"
                                                    },
                                                    {
                                                        "propertyName": "Start Date",
                                                        "value": [
                                                            "1999-08-16"
                                                        ],
                                                        "type": "date"
                                                    },
                                                    {
                                                        "propertyName": "End Date",
                                                        "value": [
                                                            "2000-05-07"
                                                        ],
                                                        "type": "date"
                                                    },
                                                    {
                                                        "propertyName": "Status",
                                                        "value": [
                                                            "active"
                                                        ],
                                                        "type": "string"
                                                    }
                                                ]
                                            },
                                            {
                                                "groupName": "Sanctions",
                                                "details": [
                                                    {
                                                        "detailName": "Department of Foreign Affairs and Trade",
                                                        "properties": [
                                                            {
                                                                "propertyName": "Start Date",
                                                                "value": [
                                                                    "2022-02-28"
                                                                ],
                                                                "type": "date"
                                                            },
                                                            {
                                                                "propertyName": "Authority",
                                                                "value": [
                                                                    "Department of Foreign Affairs and Trade"
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Program",
                                                                "value": [
                                                                    ""
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Entity",
                                                                "value": [
                                                                    "Q772247"
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Summary",
                                                                "value": [
                                                                    "Instrument of first designation and declaration: Autonomous Sanctions ....."
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Source Url",
                                                                "value": [
                                                                    "https://www.dfat.gov.au/international-relations/security/sanctions/Pages3/"
                                                                ],
                                                                "type": "url"
                                                            }
                                                        ]
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}

*companyMissing:*

```json
{
  "argumentError": "company-missing"
}
```

*accessDenied:*

```json
{
  "argumentError": "access-denied"
}
```

</details>

<details>

<summary>monitor-screening-query - Set person on monitoring</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/monitor-screening-query></mark>

**Description:**

Enable ongoing monitoring of a specific individual in screening databases. If the person is already on monitoring, an appropriate error will be returned.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `query` *(object, required)* – The parameters for querying the database.
  * `fullName` *(string, required)* – The last name of the individual.
  * `birthdayTimeFrom` *(string, optional)* – The start date and time of the birthday range in ISO 8601 format.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/monitor-screening-query \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key", 
        "query": 
            {
            "fullName": "John Doe",  
            "birthdayTimeFrom": "1982-11982-12-12T00:00:00Z"
            }
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "query": {
    "fullName": "John Doe",
    "birthdayTimeFrom": "1982-12-12T00:00:00Z"
  }
}
```

**Result examples:**

*default:*

```json
{
  "result": "64ad3b14090678e34512eab8"
}
```

*Already on monitoring:*

```json
{
    "argumentError": "already-exists"
}
```

</details>

<details>

<summary>remove-screening-query-from-monitoring - Remove person from monitoring</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/remove-screening-query-from-monitoring></mark>

**Description:**

Removes an individual from ongoing screening monitoring, unsubscribing from further updates or alerts related to that person.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `id` *(string, required)* - The ID of monitoring query.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/remove-screening-query-from-monitoring \
  -H 'Content-Type: application/json' \
  -d '{ 
      "companyKey": "your-company-secret-key", 
      "id": "64ad3b14090678e34512eab8"
      }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "id": "64ad3b14090678e34512eab8"
}
```

**Result examples:**

*default:*

```json
{ 
    "result": true
}
```

</details>

<details>

<summary>list-screening-monitoring-records - List screening records that are monitored</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/list-screening-monitoring-records></mark>

**Description:**

Retrieves a list of individuals currently being monitored for screening. This includes basic metadata like name, ID, and optionally the last updated date.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `start`  *(integer, optional)* – The number of items to skip from the beginning of the results.
* `limit` *(integer, optional)* – The maximum number of records to return.
* `date` *(string, optional, ISO 8601 format)* – Filters records after a specific date. If no date is provided, the entire list will be returned.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-screening-monitoring-records \
  -H 'Content-Type: application/json' \
  -d '{
      "companyKey":"your-company-secret-key", 
      "start":0, 
      "limit": 50
      }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "start": 0,
  "limit": 50,
  "date":"2023-07-10T12:26:00.576Z
}
```

**Result examples:**

*default:*

```json
{
  "result": {
    "start": 0,
    "limit": 50,
    "total": 4,
    "data": [
      {"fullName":"John Smith1","id":"64ad3b14090678e34512eab8"},
      {"fullName":"John Smith2","id":"64ad3ef45fcf054afc73ebb4", "lastUpdatedDate": "2023-07-01T10:50:42.389Z"},
      {"fullName":"John Smith3","id":"64ad3f3a8b3f54aca29fc0a2", "lastUpdatedDate": "2023-07-20T10:50:42.389Z"},
      {"fullName":"John Smith4","id":"64ad3f3a8b3f54aca29fc0a3"}
    ]
  }
}
```

</details>

### **Blacklist management**

Use these endpoints to manage your company's internal blacklist. You can flag individuals based on identifying attributes such as name, document number, or personal number, and retrieve or remove records as needed. Blacklist checks run automatically during verification sessions.

<details>

<summary>add-blacklist-record - Add person to the blacklist</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/add-blacklist-record></mark>

**Description:**

Adds a person to the blacklist based on identifying attributes such as name, document number, or personal number.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `query` *(object of strings, required)* - Object containing query details. **Must include** `reason` and **at least one of** the following: `firstName`, `lastName`, `personalNumber`, `documentNumber`, `birthday`.
  * firstName (string, optional) - First name of the individual.
  * lastName (string, optional) - Last name of the individual.
  * personalNumber (string, optional) - Personal identification number.
  * documentNumber (string, optional) - Document number (e.g., from an ID or passport).
  * birthday (string, optional) - Birthday in ISO 8601 format (e.g., 1990-05-14).
  * reason (string, required) - The reason for blacklisting the individual.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/add-blacklist-record' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "query": {
            "firstName": "John",
            "lastName": "Doe",
            "personalNumber": "12345678901",
            "documentNumber": "123ABC123",
            "birthday": "1980-01-01T00:00:00.000Z",
            "reason": "Reason for adding to blacklist",
            "notes" : "Fraud-related activity"
                }
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key",
    "query": {
        "firstName": "John",
        "lastName": "Doe",
        "personalNumber": "12345678901",
        "documentNumber": "123ABC123",
        "birthday": "1980-01-01T00:00:00.000Z",
        "reason": "Reason for adding to blacklist",
        "notes" : "Fraud-related activity"
    }
}
```

**Result examples:**

*default:*

```json
{
    "result": "64ad3b14090678e34512eab8"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*alreadyExists*

```json
{  
  "argumentError": "already-exists"
}
```

</details>

<details>

<summary>remove-blacklist-record - Remove record from the blacklist</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/remove-blacklist-record></mark>

**Description:**

Removes previously added record from the blacklist.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `id` (string, required) - Blacklist record ID.&#x20;

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/remove-blacklist-record' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "id": "682b09e4400b3a00067ebcf7"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key",
    "id": "682b09e4400b3a00067ebcf7"
}
```

**Result examples:**

*default:*

```json
{
    "result": true
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
"argumentError": "invalid-company-key"
}
```

*idNotFound:*

```json
{  
  "argumentError": "not-found"
}
```

</details>

<details>

<summary>list-blacklist-records - List all blacklist records associated with the company</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/list-blacklist-records></mark>

**Description:**

Retrieves all blacklist records associated with the company. You can optionally filter records by a query, set pagination with `offset` and `limit`, or retrieve the full list.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* query (object of strings, optional) - Optional filter fields:&#x20;
  * `offset` (number, optional) - Number of records to skip from the beginning.
  * `limit` (number, optional) - Maximum number of records to return.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/list-blacklist-records' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key"
}
```

**Result examples:**

*default:*

```json
{
    "result": {
        "offset": 0,
        "limit": 100,
        "total": 1,
        "data": [
            {
                "firstName": "John",
                "lastName": "Doe",
                "documentNumber": "123ABC123",
                "personalNumber": "012345678901",
                "birthday": "1980-01-01T00:00:00.000Z",
                "notes": "Fraud-related activity",
                "reason": "Reason for adding to blacklist",
                "id": "64f4d0ec35f5bb20a8022012"
            }
        ]
    }
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
"argumentError": "invalid-company-key"
}
```

*noRecord:*

```json
{
    "result": {
        "offset": 0,
        "limit": 100,
        "total": 0,
        "data": []
    }
}
```

</details>

### **Video call**&#x20;

Use these endpoints to manage and retrieve data from video call sessions. You can access screenshots taken by the operator during a call, retrieve recorded video files, and programmatically end an active call.

<details>

<summary>get-video-call-shots - Video call shots</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-video-call-shots></mark>

**Description:**

Retrieves all screenshots (shots) taken by the operator during a video call session. These images serve as part of the evidence captured during the KYC verification.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-shots \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```json
{
  "result": "data:application/x-tar;base64,base64String"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-video-call-videos - Video call videos</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-video-call-videos></mark>

**Description:**

Retrieves video recordings from a video call session.\
The endpoint supports two retrieval modes:

1. **Preferred (recommended):** retrieve a **single video file** using the `fileId` parameter.
2. **Legacy:** retrieve **all video files at once** (returned as a `.tar` archive).

Using `fileId` is recommended for better performance, reduced payload size, and improved reliability.

**Parameters:**

**Required**

* **companyKey** *(string)* — The company's secret key.
* **sessionId** *(string)* — The unique identifier of the session.

**Optional (recommended)**

* **fileId** *(string)* — The unique ID of the video file you want to retrieve.\
  When provided, the endpoint returns **only the specified video file** instead of a full archive.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-videos \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "fileId": "abc123xyz"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "fileId": "abc123xyz"
}
```

**Result examples:**

single file:

```json
"result": {
    "contentType": "video/mp4"
  }
```

*all files:*

```json
"result": {
    "contentType": "application/x-tar"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*notFound:*

```json
{  
    "argumentError": "not-found"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>end-video-call - End video call for the connected user</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/end-video-call></mark>

**Description:**

Manually ends an active video call session for the connected user. This endpoint is typically used by system to forcefully close a session that is still ongoing.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-videos \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId":"example-session-id-12345"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Result examples:**

*default:*

```
{ }
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

</details>

### Questionnaire attachments

Use these endpoints to manage files associated with attachment-type questions across questionnaire steps. Files can originate from multiple sources — uploaded by the user during their KYC session, submitted by an operator in Manage, defined statically in a configuration, or uploaded programmatically via the API.

<details>

<summary>get-question-file - Get file from the question</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-question-file></mark>

**Description:**

Retrieves a file attached to a question in a questionnaire step. Use this endpoint to access files regardless of how they were submitted — this includes files uploaded **by the user during their KYC session** and files submitted **by an operator in Manage**. Use `fileIndex` to reference a specific file when multiple files are attached to the same question.

\
**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionId` *(string, required)* - The unique identifier of the session.
* `stepKey` *(string, required)* – The unique key of the questionnaire step.
* `questionKey`*(string, required)* – The unique key of the question within the questionnaire.
* `fileIndex` *(integer, optional)* – The index of the file when multiple files are uploaded to a question. This is used to reference a specific file within the question’s attachments.

**cURL example:**

```bash
curl -X POST 'https://external-api.identomat.com/get-question-file' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "fileIndex": 0
}'
```

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1",
  "questionKey": "question-1",
  "fileIndex": 0
}
```

**Result examples:**

*default:*

```json
{
  "result": {
        "contentType": "application/pdf | image/png | image/jpeg"
    }
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>upload-file - Upload file to a question</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/upload-file></mark>

**Description:**

Uploads a file to a specific Attachment-type question within a questionnaire step. The file must be provided as a base64-encoded data URI. Returns a `fileId` that can be used to retrieve or delete the file later.

**Supported formats:**

* `data:application/pdf;base64,...`
* `data:image/jpeg;base64,...`
* `data:image/png;base64,...`

**Parameters:**

* `companyKey` *(string, required)* — The company's secret key.
* `sessionId` *(string, required)* — The unique identifier of the session.
* `stepKey` *(string, required)* — The unique key of the questionnaire step.
* `questionKey` *(string, required)* — The unique key of the Attachment-type question.
* `content` *(string, required)* — The file content as a base64-encoded data URI (e.g. `data:image/png;base64,...`).

**cURL example:**

```bash
curl -X POST https://external-api.identomat.com/upload-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "content": "data:image/png;base64,iVBORw0KGgo..."
    }'
```

**Request parameter example:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "content": "data:image/png;base64,iVBORw0KGgo..."
}
```

**Result examples:**

*default:*

```json
{
  "result": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

<details>

<summary>get-file - Get file from a question</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-file></mark>

**Description:**

Retrieves a file that was uploaded programmatically via the `upload-file` endpoint.

**Parameters:**

* `companyKey` *(string, required)* — The company's secret key.
* `sessionId` *(string, required)* — The unique identifier of the session.
* `stepKey` *(string, required)* — The unique key of the questionnaire step.
* `questionKey` *(string, required)* — The unique key of the Attachment-type question.
* `filename` *(string, required)* — The file ID returned by `upload-file`.

**cURL example:**

```bash
curl -X POST https://external-api.identomat.com/get-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
    }'
```

**Request parameter example:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

**Result examples:**

*default:*

```json
File stream
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

<details>

<summary>delete-file - Delete file from a question</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/delete-file></mark>

**Description:**

Permanently deletes a previously uploaded file from an Attachment-type question. This operation is irreversible.

**Parameters:**

* `companyKey` *(string, required)* — The company's secret key.
* `sessionId` *(string, required)* — The unique identifier of the session.
* `stepKey` *(string, required)* — The unique key of the questionnaire step.
* `questionKey` *(string, required)* — The unique key of the Attachment-type question.
* `filename` *(string, required)* — The file ID returned by `upload-file`.

**cURL example:**

```bash
curl -X POST https://external-api.identomat.com/delete-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
    }'
```

**Request parameter example:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

**Result examples:**

*default:*

```json
{
  "result": true
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

### Other methods

Use these endpoints to manage groups, users, and session configurations in Manage. Groups can be used to control which operators have access to specific sessions. User management endpoints allow you to create, list, and delete platform users programmatically. You can also retrieve the full details of a session configuration by its ID.

<details>

<summary>list-groups - List groups</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/list-groups></mark>

**Description:**

Retrieves a list of groups associated with the specified company. Each group includes its ID, name, description and a list of its members.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-groups \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key"
}
```

**Result examples:**

*default:*

```json
{
  "result": [
        {
            "id": "650976e8dc32104b8bb1757e",
            "name": "Group name",
            "description": "Group description",
            "memberUserIds": [
                        "64f4d0ec35f5bb20a8022012",
                        "64f4d10435f5bb20a8022013",
                        "64f4d12335f5bb20a8022014"
              ]
        }
    ]
}
```

*noGroups:*

```json
{
  "result": []
}
```

*notFound:*

```json
{  
    "argumentError": "not-found"
}
```

</details>

<details>

<summary>make-group - Create a new group</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/make-group></mark>

**Description:**

Creates a new user group under the specified company. A group can be used to manage permissions, assign sessions, or organize users.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `name` *(string, required)* – The name of the new group.
* `description` (string, optional) - The description of the new group.&#x20;
* `memberIds` *(array of strings, optional)* – A list of user IDs to be added to the group.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/make-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "name": "Group name",
        "description": "Group description",
        "memberIds": 
            [ 
            "user1-id", 
            "user2-id"
            ]
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key",
    "name": "Group name",
    "description": "Group description",
    "memberIds": [ "user1-id", "user2-id"
    ]
}
```

**Result examples:**

*default:*

```json
{
    "result": {
        "id": "6784c6d768cb9e8a891087e1"
    }
}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>change-group - Update existing group</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/make-group></mark>

**Description:**

Allows you to modify an existing group by updating its name or changing the members in the group. **To keep existing members in the group, you must include their IDs in the list.**

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `groupId` *(string, required)* – The unique identifier of the group.
* `name` *(string, optional)* – The name of the new group.
* `description` *(string, optional)* - The description of the new group.&#x20;
* `memberIds` *(array of strings, optional)* – A list of user IDs to be added or removed from the group. To keep existing members in the group, you must include their IDs in the list.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/change-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "groupId": "64a50a0c6c2ff7f9a1f12833",
        "name": "Group 1",
        "description": "Group 1 description",
        "memberIds": 
            [ 
            "user1-id", 
            "user2-id"
            ]
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key",
    "groupId": "64a50a0c6c2ff7f9a1f12833",
    "name": "Group 1",
    "description": "Group 1 description",
    "memberIds": [ "user1-id", "user2-id"
    ]
}
```

**Result examples:**

*default:*

```
{}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>delete-group - Delete a group</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/delete-group></mark>

**Description:**

Allows you to delete a group permanently from the system.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `groupId` *(string, required)* – The unique identifier of the group.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/delete-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "groupId": "64b63613ad6f7ccaec256773"
    ]
}'
```

{% endcode %}

**Request parameter examples:**

```json
{
    "companyKey": "your-company-secret-key",
    "groupId": "64b63613ad6f7ccaec256773"
    ]
}
```

**Result examples:**

*default:*

```
{}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>list-users - List users</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/list-users></mark>

**Description:**

This endpoint retrieves a list of users associated with the company.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-users \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key"
}
```

**Result examples:**

*default:*

```json
{
    "result": [
        {
            "id": "user_id",
            "username": "user@identomat.com",
            "roles": [
                "administrator",
                "operator",
                "call_center_operator"
            ]
        }
    ]
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

</details>

<details>

<summary>create-user - Create a user</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/create-user></mark>

**Description:**

Creates a new user for the Identomat platform (Manage).

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `email` *(string, required)* - The email address of the new user.
* `emailVerified` (boolean, optional) - Whether the email should be marked as verified. Defaults to `false`.
* `password` (string, required) - The user’s password (minimum 8 characters).
* `firstName` (string, optional) - First name of the user.
* `lastName` (string, optional) - Last name of the user.
* `rights` (array of strings, optional) - List of roles to assign to the user. If omitted, defaults to `call_center_operator`. Valid values are:
  * `call_center_operator`
  * `operator`
  * `administrator`

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/create-user' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "email": "john.doe@example.com",
        "emailVerified": true,
        "password": "SecurePass123!",
        "firstName": "John",
        "lastName": "Doe",
        "rights": [
            "call_center_operator",
            "administrator",
            "operator"
    ]
}'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "email": "john.doe@example.com",
  "emailVerified": true,
  "password": "SecurePass123!",
  "firstName": "John",
  "lastName": "Doe",
  "rights": [
        "call_center_operator",
        "administrator",
        "operator"
    ]
}
```

**Result examples:**

*default:*

```json
{
    "result": "68243e94540d1e5fe6c04a0f"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*invalidEmailFormat:*

```json
{
  "argumentError": "invalid-email-format"
}
```

*passwordTooShort*

```json
{
  "argumentError": "password-too-short"
}
```

*passwordIsNotString*

```json
{
  "internalError": Illegal arguments: number, string"
}
```

*invalidRights*

```json
{
  "argumentError": "invalid-rights"
}
```

*userAlreadyExists:*

```json
{
  "argumentError": "user-already-exists"
}
```

</details>

<details>

<summary>delete-user - Delete a user</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/delete-user></mark>

**Description:**

Deletes a user from the Identomat platform (Manage).

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `userId` *(string, required)* - The unique idenfitier of the user.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/delete-user' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "userId": "68243e94540d1e5fe6c04a0f"
    ]
}'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "userId": "68243e94540d1e5fe6c04a0f"
}
```

**Result examples:**

*default:*

```
{ }
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*userNotFound:*

```json
{
  "argumentError": "user-not-found"
}
```

</details>

<details>

<summary>get-session-config - Get session configuration</summary>

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/get-session-config></mark>

**Description:**

This endpoint retrieves the configuration details for a specific session configuration based on the given session config ID.

**Parameters:**

* `companyKey` *(string, required)* - The company's secret key.
* `sessionConfigId` *(string, required)* – The unique identifier for the session configuration.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-session-config \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "sessionConfigId":"6162636465666768696a6b6c"
}'
```

{% endcode %}

**Request parameter examples:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionConfigId": "6162636465666768696a6b6c"
}
```

**Result examples:**

*default:*

```json
{
  "result": {
    "id": "679c74e4d9725987e3879265",
    "name": "Configuration Template",
    "general": {
        "language": "en",
        "sessionLifetime": 15
        },
    "steps": [
      {
        "title": {
          "en": "ID Verification"
        },
        "type": "identity-document",
        "key": "select_document_id",
        "flags": {
          "documentTypes": [
            "id",
            "passport",
            "driver_license",
            "residence_permit"
          ]
        }
      },
      {
        "title": {
          "en": "Liveness Check"
        },
        "type": "liveness",
        "key": "liveness",
        "flags": {
          "liveness": true,
          "maxLivenessAttempts": 3
        }
      }
    ]
  }
}

```

*wrongParameters:*

```
{
  "argumentError": "wrong-parameters"
}
```

</details>

### Processing an image

Use these endpoints to extract data from identity document images independently of a verification session. Each endpoint accepts a JPEG image and returns structured data parsed from the document. The number of fields returned may vary depending on the document type and the quality of the image.

<details>

<summary>card/front/ - ID card front side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/card/front/></mark>

**Parameters:**

* `company_key` *(string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/card/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Given_Names_en_US": "JOHN",
    "Surname_en_US": "DOE",
    "citizenship": "USA",
    "Sex_en_US": "M",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1990",
    "Date_of_Expiry_en_US": "1/1/2030",
    "Document_Number_en_US": "USA1234567",
    "Issuing_State_Code_en_US": "USA",
    "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
    "requestId": "abcdef1234567890abcdef1234567890",
    "person": {
        "first_name": "JOHN",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "citizenship": "USA",
        "document_number": "USA1234567",
        "document_expires": "1/1/2030",
        "document_expires_time": "2030-01-01T00:00:00.000Z",
        "personal_number": "1234567890",
        "issuing_state": "USA",
        "sex": "M"
    }
}
```

</details>

<details>

<summary>card/back/ - ID card back side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/card/back/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/card/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example-image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Date_of_Issue_en_US": "6/28/2021",
    "Issuing_State_Code_en_US": "USA",
    "Place_of_Birth_en_US": "USA",
    "Date_of_Issued_ISO": "2021-06-28T00:00:00.000Z",
    "Given_Names_en_US": "JOHN DOE",
    "Surname_en_US": "DOE",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1990",
    "Date_of_Expiry_en_US": "6/28/2031",
    "Document_Number_en_US": "USA1234567",
    "Nationality_en_US": "USA",
    "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2031-06-28T00:00:00.000Z",
    "mrz": "IDUSA1234567938001085718<<<<\n8001081M2606288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<",
    "requestId": "abcdef1234567890abcdef1234567890",
    "person": {
        "first_name": "JOHN DOE",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "birth_place": "USA",
        "nationality": "USA",
        "document_number": "USA1234567",
        "document_issued": "6/28/2021",
        "document_expires": "6/28/2031",
        "document_expires_time": "2031-06-28T00:00:00.000Z",
        "document_issued_time": "2021-06-28T00:00:00.000Z",
        "personal_number": "1234567890",
        "issuing_state": "USA",
        "sex": "M",
        "mrz": "IDUSA1234567938001085718<<<<\n8001081M2606288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<"
    }
}
```

</details>

<details>

<summary>license/front/ - Driver license front side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/license/front/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/license/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Given_Names_ka_GE": "ჯონ",
    "Surname_ka_GE": "დო",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1985",
    "Date_of_Issue_en_US": "5/15/2015",
    "Document_Number_en_US": "ID1234567",
    "Issuing_State_Code_en_US": "USA",
    "Place_of_Birth_en_US": "Los Angeles",
    "Authority_en_US": "Department of Motor Vehicles",
    "Date_of_Birth_ISO": "1985-01-01T00:00:00.000Z",
    "Date_of_Issued_ISO": "2015-05-15T00:00:00.000Z",
    "Address_en_US": "456 Main St, Los Angeles, CA 90001",
    "Local_Address_en_US": "456 Main St, Los Angeles, CA 90001",
    "localAuthority": "Department of Motor Vehicles",
    "Drivers_License_Class_en_US": "C",
    "requestId": "a1b2c3d4e5f67890",
    "person": {
        "local_first_name": "ჯონ",
        "local_last_name": "დო",
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "1/1/1985",
        "birthday_time": "1985-01-01T00:00:00.000Z",
        "age": 40,
        "birth_place": "Los Angeles",
        "document_number": "ID1234567",
        "document_issued": "5/15/2015",
        "document_issued_time": "2015-05-15T00:00:00.000Z",
        "personal_number": "1234567890",
        "authority": "Department of Motor Vehicles",
        "local_authority": "Department of Motor Vehicles",
        "issuing_state": "USA",
        "address": "456 Main St, Los Angeles, CA 90001",
        "local_address": "456 ქუჩა, ლოს ანჯელესი, CA 90001"
    }
}
```

</details>

<details>

<summary>license/back/ - Driver license back side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/license/back/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/license/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Issuing_State_Code_en_US": "USA",
    "requestId": "262f6ee39992e0a61769c5cc13b2f092",
    "person": {
        "issuing_state": "USA"
    }
}
```

</details>

<details>

<summary>residence/front/ - Residence permit front side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/residence/front/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/residence/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Date_of_Birth_en_US": "5/15/1985",
    "Date_of_Expiry_en_US": "12/31/2030",
    "Document_Number_en_US": "D12345678",
    "Nationality_en_US": "USA",
    "Issuing_State_Code_en_US": "USA",
    "Date_of_Birth_ISO": "1985-05-15T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-12-31T00:00:00.000Z",
    "requestId": "1234567890abcdef1234567890abcdef",
    "person": {
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "5/15/1985",
        "birthday_time": "1985-05-15T00:00:00.000Z",
        "age": 40,
        "nationality": "USA",
        "document_number": "D12345678",
        "document_expires": "12/31/2030",
        "document_expires_time": "2030-12-31T00:00:00.000Z",
        "issuing_state": "USA",
        "sex": "M"
    }
}
```

</details>

<details>

<summary>residence/back/ - Residence permit back side</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/residence/back/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/residence/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "Date_of_Issue_en_US": "7/1/2020",
    "Issuing_State_Code_en_US": "ITA",
    "Place_of_Birth_en_US": "CITTA",
    "Date_of_Issued_ISO": "2020-07-01T00:00:00.000Z",
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Date_of_Birth_en_US": "5/15/1985",
    "Date_of_Expiry_en_US": "12/31/2030",
    "Document_Number_en_US": "D12345678",
    "Nationality_en_US": "USA",
    "Date_of_Birth_ISO": "1985-05-15T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-12-31T00:00:00.000Z",
    "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nD12345678USA850515M3031232<<<<<<<<<<<<<<06",
    "requestId": "5924aa4e44eb394f7cd2377568c21859",
    "person": {
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "5/15/1985",
        "birthday_time": "1985-05-15T00:00:00.000Z",
        "age": 40,
        "birth_place": "CITTA",
        "nationality": "USA",
        "document_number": "D12345678",
        "document_issued": "7/1/2020",
        "document_expires": "12/31/2030",
        "document_expires_time": "2030-12-31T00:00:00.000Z",
        "document_issued_time": "2020-07-01T00:00:00.000Z",
        "issuing_state": "ITA",
        "sex": "M",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nD12345678USA850515M3031232<<<<<<<<<<<<<<06"
    }
}
```

</details>

<details>

<summary>passport/ - Passport photo page</summary>

**URL:**

<mark style="color:blue;"><https://widget.identomat.com/external-api/passport/></mark>

**Parameters:**

* `company_key` (*string, required)* - The company's secret key.
* `image` *(file, required)* – A JPEG image file to be uploaded.

**cURL example:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/passport/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Result example:**

*default:*

```json
{
    "mrzData": {
        "Given_Names_en_US": "JOHN",
        "Surname_en_US": "DOE",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1990",
        "Date_of_Expiry_en_US": "1/1/2030",
        "Document_Number_en_US": "USA1234567",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nUSA1234567USA9001019M3001019<<<<<<<<<<<<<<00"
    },
    "visualData": {
        "Given_Names_en_US": "JOHN",
        "Surname_en_US": "DOE",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "1234567890",
        "Date_of_Birth_en_US": "1/1/1990",
        "Date_of_Expiry_en_US": "1/1/2030",
        "Date_of_Issue_en_US": "1/1/2020",
        "Document_Number_en_US": "USA1234567",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Place_of_Birth_en_US": "NEW YORK",
        "Authority_en_US": "USA AUTHORITY",
        "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
        "Date_of_Issued_ISO": "2020-01-01T00:00:00.000Z"
    },
    "requestId": "1234567890abcdef1234567890abcdef",
    "person": {
        "first_name": "JOHN",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "birth_place": "NEW YORK",
        "nationality": "USA",
        "document_number": "USA1234567",
        "document_issued": "1/1/2020",
        "document_expires": "1/1/2030",
        "document_expires_time": "2030-01-01T00:00:00.000Z",
        "document_issued_time": "2020-01-01T00:00:00.000Z",
        "personal_number": "1234567890",
        "authority": "USA AUTHORITY",
        "issuing_state": "USA",
        "sex": "M",
        "status": "FIELDS_MISMATCH",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nUSA1234567USA9001019M3001019<<<<<<<<<<<<<<00"
    }
}
```

</details>

### Additional processing

Use these endpoints for standalone biometric operations outside of a verification session. Currently this includes face comparison, which returns a similarity score for two provided face images.

<details>

<summary>compare-faces/ - Get a similarity score for two faces</summary>

The minimum recommended face size in the picture is **80 pixels**. If the face size is between **65-79 pixels**, an error code will be returned along with the similarity score.

**URL:**

<mark style="color:blue;"><https://external-api.identomat.com/compare-faces></mark>

**Parameters:**

* `companyKey` (string, required) - The company's secret key.
* `face1` *(file, required)* - A JPEG image file for face1
* `face2` *(file, required)* - A JPEG image file for face2

**cURL example:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/compare-faces \
    -F 'companyKey={your-company-secret-key}' \
    -F 'face1=@{example_face1.jpg}' \
    -F 'face2=@{example_face2.jpg}'
```

{% endcode %}

**Result examples:**

*default:*

```json
{
    "result": {
        "similarity": 0.9399788229619534,
        "face1Statuses": [],
        "face2Statuses": []
    }
}
```

*error:*

```json
{
    "result": {
        "similarity": null,
        "face1Statuses": [
            "FACE_FAR_AWAY"
        ],
        "face2Statuses": []
    }
}
```

</details>


# Callbacks

Learn how to receive and handle real-time status updates and event notifications from the verification flow using callbacks.

## Overview

Callbacks allow your system to receive event notifications directly from the platform whenever specific actions occur, such as one-time password (OTP) creation, session sharing, or status updates.

Callbacks are sent as `POST` requests to the URL defined in your **company settings**. Each callback includes a `callbackApiKey` that can be used to verify authenticity.

## Prerequisites

To enable callbacks, clients must configure the following parameters in their **Company settings**:

* **Callback URL** – endpoint where the callback payloads will be sent.
* **Callback API key** – a unique key for authentication and verification.

***

## SMS provider callbacks

If the **Client’s own SMS provider** is selected in company settings, the system sends callback requests instead of delivering SMS directly. The client is then responsible for sending the SMS messages based on the received callback data.

### Callback event: **one-time-password**

**Description:**\
Triggered when a one-time password (OTP) is generated and must be sent to the end-user during phone number verification.

**Requirements:**

* Callback URL (mandatory)
* Callback API key (mandatory)

**Sample callback payload:**

```json
{
  "callbackApiKey": "callback-api-key-123",
  "type": "one-time-password-request",
  "sessionId": "wwb83rh1se22wd81z0tx8bqlerljq5kgf6rxem1q",
  "text": "Your code is 6867",
  "phoneNumber": "+995512345678"
}
```

### Callback event: **share-session-link-via-sms**

**Description:**\
Triggered when a session link is shared with a user via SMS from the Manage platform.

**Requirements:**

* Callback URL (mandatory)
* Callback API key (mandatory)

**Sample callback payload:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "share-session-link-via-sms",
  "sessionId": "ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "text": "Hello John Doe, please complete your verification using the link below.",
  "phoneNumber": "+995512345678",
  "sessionLink": "https://widget.identomat.com/?session_token=ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "createdBy": "operator@example.com"
}
```

***

## Email provider callbacks

If your company uses **Client's own provider** in the Email provider settings, Identomat will send callbacks to your system for sending emails.

### Callback event: share-session-link-via-email

**Description:**\
Triggered when a verification session link is shared via email from the Manage platform.

**Client must provide:**

* Callback URL
* Callback API key

**Sample callback payload:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "share-session-link-via-email",
  "sessionId": "5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
  "address": "john.doe@example.com",
  "subject": "Verification Required",
  "content": "Dear John Doe, please complete your verification using the link below.",
  "cc": "support@example.com",
  "sessionLink": "https://widget.identomat.com/?session_token=5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
  "createdBy": "operator@example.com"
}
```

### Callback Event: email-one-time-password-request

**Description:**\
Triggered when a one-time password (OTP) is generated and must be sent to the end-user during email verification.

**Requirements:**

* Callback URL (mandatory)
* Callback API key (mandatory)

**Sample callback payload:**

```json
{
    "callbackApiKey": "apikey123",
    "type": "email-one-time-password-request",
    "sessionId": "5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
    "address": "john.doe@example.com",
    "subject": "Mail Verification",
    "content": "Your code is 6867"
}
```

***

## Session status callbacks

This callback is independent of the provider settings.\
It notifies the client whenever a session’s status changes.

### Callback Event: session-change

**Client must provide:**

* Callback URL
* Callback API key

**Sample callback payload:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "session-change",
  "sessionId": "ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "result": "APPROVED"
}
```

The `result` field in a `session-change` callback reflects the current session status. Possible values:

<table><thead><tr><th width="306.64453125">Value</th><th>Description</th></tr></thead><tbody><tr><td><code>APPROVED</code></td><td>The session was approved.</td></tr><tr><td><code>REJECTED</code></td><td>The session was rejected.</td></tr><tr><td><code>MANUAL_CHECK</code></td><td>The session requires manual review.</td></tr><tr><td><code>ADDITIONAL_INFORMATION_REQUESTED</code></td><td>The operator has requested further verification from the applicant.</td></tr></tbody></table>

**KYB sessions**

For KYB sessions, the payload includes an additional `sessionType` field:

```json
{
  "callbackApiKey": "apikey123",
  "type": "session-change",
  "sessionId": "65lfvkv1t2o25ozimqu3nh797umb1ydvkpltl3ib",
  "result": "APPROVED",
  "sessionType": "kyb"
}
```

> If `sessionType` is absent, the session is a standard KYC session.

***

## Video call callbacks

These callbacks are triggered during the video call process and notify the client about the availability or absence of recorded video files.

The callback is sent regardless of whether a video was successfully created.\
This allows clients to detect when a room ended **without media**, or when a video file becomes **ready for retrieval**.

### Callback event: **video-call-status-update**

**Description:**\
Sent whenever a video call room changes status.\
This includes cases where:

* the video call room ended with **no media recorded** (`roomStatus: "empty"`), or
* the video file has been successfully **created and uploaded** (`videoFileStatus: "available"`).

**Client must provide:**

* Callback URL
* Callback API key

{% hint style="info" %}
This callback is used for real-time notifications, but the complete and always up-to-date video call status is also available in the **`videoCallStatus`** field of the[ **`/result` endpoint.**](/developer-tools/api-reference#result-session-results) This allows clients to poll `/result` or perform state recovery if any callback is missed.\
\
When a recording becomes available, we strongly recommend retrieving it using the **`fileId`** parameter of the [**`/get-video-call-videos`**](/developer-tools/api-reference#get-video-call-videos-video-call-videos) endpoint.\
Using `fileId` allows your system to download video files **one-by-one**, provides better control over large recordings, and avoids fetching unnecessary files.

Downloading all files in a single request is still supported for backward compatibility but is **not recommended** for new integrations.
{% endhint %}

#### Case 1 — Room ended with no media recorded

**Sample callback payload:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "video-call-status-update",
  "sessionId": "wtmfcr7tcj4q04co8mdg8yryou9glrcr2tbzm016",
  "roomId": "RM860d0a0272a619cdc0b4a855e75f8466",
  "roomStatus": "empty",
  "compositionStatus": null,
  "videoFileStatus": null,
  "videoFileId": null
}
```

#### Case 2 — Video file created and ready for retrieval

**Sample callback payload:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "video-call-status-update",
  "sessionId": "ypsgyus3mosob3tugu3emgekqjykam5nvue1z1fu",
  "roomId": "RMc7eb8093d2461af50834f69e86692db3",
  "roomStatus": "ended",
  "compositionStatus": "available",
  "videoFileStatus": "available",
  "videoFileId": "hwenFYGlG54kRjmSruy3kxg54zV2pNPwHimseYao"
}
```

<table><thead><tr><th width="236.953125">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>callbackApiKey</strong></td><td>Key used for authentication.</td></tr><tr><td><strong>type</strong></td><td>Always <code>"video-call-status-update"</code>.</td></tr><tr><td><strong>sessionId</strong></td><td>The ID of the verification session.</td></tr><tr><td><strong>roomId</strong></td><td>Unique identifier of the video room.</td></tr><tr><td><strong>roomStatus</strong></td><td>Indicates the state of the room (<code>empty</code>, <code>ended</code>).</td></tr><tr><td><strong>compositionStatus</strong></td><td>Status of composition file, if any (<code>available</code>, <code>null</code>).</td></tr><tr><td><strong>videoFileStatus</strong></td><td>Indicates whether the video file is ready (<code>available</code>, <code>null</code>).</td></tr><tr><td><strong>videoFileId</strong></td><td>Identifier of the uploaded video file, if available.</td></tr></tbody></table>


# Additional information requests

Request additional verification steps from applicants within an existing session, without losing audit history.

### How it works

When an operator triggers an additional information request, a new verification link is generated for the applicant. The operator sends it via Manage — by SMS, email, or by copying and sharing the link manually. The session ID visible in Manage remains the same throughout all verification requests.

Upon opening the link, the applicant is presented only with **the steps defined in the new verification request.** Previously completed steps are not shown to the applicant and their data is not modified.

Decisions (automatic or manual) apply to the current verification request only. Once all steps in the request are completed, the standard decision flow runs as normal.

***

### Session status

A new session status is introduced for this feature:

<table><thead><tr><th width="302.0625">Status</th><th>Description</th></tr></thead><tbody><tr><td><code>additional_information_requested</code></td><td>The session has been returned to the applicant for further verification. Sits between a terminal state and <code>in_progress</code>.</td></tr></tbody></table>

#### **Status transitions:**

```
approved / rejected / manual_check / expired
        ↓
additional_information_requested
        ↓ (applicant opens the link)
in_progress
        ↓
approved / rejected / manual_check
```

***

### Verification history

A session can go through multiple verification requests over its lifetime. Each request generates its own set of steps based on the selected configuration. If a step type was completed in a previous request, it is generated again as a new attempt — full history is preserved and accessible for audit purposes. The latest attempt per step is used for review and decision-making.

***

### Enabling the feature

* **How to enable**: [Toggle this setting](/no-code-workflows/configuration-settings#request-additional-information) on in the **Configuration settings** tab of the configurations builder.&#x20;

```json
"sessionConfig": {
  "id": "6792031d9e97ea46872e190c",
  "name": "My Configuration",
  "additionalInformationRequest": true
}
```

When enabled, operators will see the **Request more information** button on eligible sessions in Manage.

Configurations available for selection when making a request are filtered by the operator's group membership, consistent with access control rules applied elsewhere in the platform.


# Document data review

Enable end-users and operators to review and correct OCR-extracted document data within a verification session, with a full audit trail of all changes.

### Overview

When a document is scanned during verification, data is extracted automatically via OCR. The Document data review feature allows this extracted data to be reviewed and corrected — by the applicant, the operator, or both — before a final decision is made.

All edits are fully logged with timestamps and actor information, preserving a complete audit trail accessible via session activities.

***

#### Data source trust hierarchy

Not all fields are editable. The system enforces a strict trust hierarchy based on how data was read:

| Source           | Editable     |
| ---------------- | ------------ |
| NFC              | Never        |
| QR               | Never        |
| MRZ              | Never        |
| OCR              | Configurable |
| Manually entered | Configurable |

Fields populated from NFC, QR, or MRZ are **permanently read-only** regardless of configuration. This rule is enforced at the backend level and cannot be overridden.

***

#### Configurable fields

The following fields can be enabled for review and correction:

* First Name (English)
* First Name (Local)
* Middle Name (English)
* Middle Name (Local)
* Last Name (English)
* Last Name (Local)
* Father's Name (English)
* Father's Name (Local)
* Date of Birth
* Place of Birth
* Sex
* Citizenship
* Nationality
* Document Number
* Authority
* Document Expiry Date
* Document Issue Date
* Document Issuing State
* Personal Number\*
* Address
* State

***

#### Enabling the feature

The feature is controlled by the **Enable document data editing** toggle inside the **ID verification step** of your configuration.

* **Via the No-code workflow builder:** Enable the toggle in the [ID verification step settings](/no-code-workflows/kyc-steps#id-verification). Once enabled, additional options become available:
  * **Who can edit** — applicant only, operator only, or both
  * **Which fields are editable** — per field, with editable and mandatory settings
* **Via API — step configuration:** The review behavior is configured inside the `identity-document` step using the `review` object. See [ID Verification step](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification) in the **Developer guide** for the full configuration reference.

***

#### End-user flow

When the review step is enabled, the applicant is shown a review page after document scanning where they can verify and correct the extracted data.

**When the review page is shown:** The review page is only presented if at least one field is editable and at least one of those fields is either empty or not sourced from MRZ, NFC, or QR. If all editable fields were populated from trusted sources, **the review step is skipped automatically.**

**Field visibility rules:**

* Editable fields are always shown, prefilled if data was extracted
* Non-editable fields that are filled are shown as read-only
* Non-editable empty fields are not shown

**Mandatory fields:** if a field is marked mandatory, the applicant must fill it before proceeding.

**Reset behavior:** review page data resets only if the applicant re-scans the document. Navigating back and forward without rescanning does not reset entered data.

***

#### Operator flow

If operator editing is enabled, operators can review and correct document data directly from the session in Manage.

**Edit mode:** Sessions open in read-only mode by default. The operator clicks **Edit details** to enter edit mode, makes corrections, then clicks **Save** to store changes. A **Cancel** button reverts any unsaved edits.

**Manual check:** Saving an edit automatically moves the session to **Manual check**, requiring a final decision from the operator. The **Edit** button is only available when the session is not in an **Approved** or **Rejected** state. If the session has already been decided, the operator must first move it back to Manual check before editing is possible.

***

#### Audit trail

Every field stores a full history of changes including the original OCR value, any user or operator edits, the final value, and timestamps with actor information for each change.

Each field in the session UI displays a **source tag** indicating where the current value came from — for example `OCR`, `MRZ`, `NFC`, `User`, or `Operator`. Hovering over the tag shows the full edit history for that field.

The complete activity log, including all data edits, can be retrieved via the[ `list-session-activities` endpoint.](/developer-tools/api-reference#list-session-activities-list-of-session-activities)


# Person data mapping

Collect and map identity fields to Person data through a User questionnaire step.

### **How it works**

Person data fields — such as name, date of birth, and personal number — are normally populated automatically via the ID document step through OCR, MRZ, NFC, or QR/Barcode extraction. Person data mapping allows clients to populate these same fields through a User questionnaire step instead, covering flows **where document scanning is not required** or **where the client already holds some of the applicant's data.**

When mapping is enabled on a User questionnaire step, individual questions can be linked to specific Person data fields. Answers submitted by the applicant populate those fields in the session's Person data section and become available for downstream identity verification checks.

This is a general-purpose feature and is not tied to any specific verification provider.

***

#### **Field sources and precedence**

Person data fields can originate from multiple sources within the same session. Each field displays a source tag so operators can identify where the value came from:

<table><thead><tr><th width="199.984375">Tag</th><th>Source</th></tr></thead><tbody><tr><td><strong>OCR /</strong> <strong>MRZ</strong> / <strong>NFC / QR</strong> </td><td>Extracted automatically from the document via OCR, MRZ, NFC, or QR</td></tr><tr><td><strong>User review</strong></td><td>Edited by the applicant during document data review after scanning</td></tr><tr><td><strong>User input</strong></td><td>Entered by the applicant in the User questionnaire</td></tr><tr><td><strong>Client provided</strong></td><td>Preset by the client via API or Configuration before the session started</td></tr><tr><td><strong>Operator</strong></td><td>Entered or corrected by the operator during review</td></tr></tbody></table>

When a session includes both an ID verification step and a mapped User questionnaire step, the following precedence applies:

* Document data takes precedence over questionnaire-mapped values for any overlapping field.
* Fields not populated by the document step are filled from the questionnaire-mapped values.
* Both values are stored and visible in session details.

Field change history is accessible via tooltip on each field and is preserved across all edits for audit purposes.

***

#### **Session routing**

Sessions with "Map to Person data" enabled are automatically routed to **Manual check** on completion, regardless of other step outcomes.&#x20;

***

#### **Enabling the feature**

**How to enable:** Turn on **Map to Person data** in the User questionnaire step settings in the Configuration builder.

When enabled, a Person data field selector appears beneath each compatible question. Not every question needs to be mapped — mapping is optional per question.

**Compatible question and field types:**

<table><thead><tr><th width="299.40625">Question type</th><th>Mappable Person Data fields</th></tr></thead><tbody><tr><td>Short answer (Free text or Number)</td><td>First Name, Last Name, Middle Name, Father's Name (Eng./Local), Place of Birth, Document Number, Personal Number, Authority, Address, State</td></tr><tr><td>Date</td><td>Date of Birth, Document Expires On, Document Issuing Date</td></tr><tr><td>Radio</td><td>Sex</td></tr><tr><td>Dropdown</td><td>Citizenship, Nationality, Document Issuing State</td></tr></tbody></table>

Checkbox, File Upload, and Attachment question types cannot be mapped to Person data fields.

A Person Data field can **only be mapped to one question** within the same configuration.


# AnyDoc reader

### **Overview**

AnyDoc lets clients extract structured data from **any document type** using AI - payslips, bank statements, utility bills, tax declarations, invoices, or any other document that doesn't fit into Identomat's predefined document types.

Rather than relying on a fixed set of document templates, the administrator defines exactly which fields should be extracted from a document, and an AI model reads the uploaded file and returns the values in a structured, validated format. This makes AnyDoc suited for client-specific or non-standard documents that a general-purpose OCR flow can't cover.

Multiple AnyDoc steps can be added to the same flow, each independently configured for a different document type - for example, one step for a payslip and a separate step for a tax declaration.

***

### **How it works**

1. The administrator configures a document type, its expected format, and the fields to extract - each field can include a label, key, data type, and hints to guide the AI.
2. When the applicant uploads a document, the system generates an extraction prompt from the configured fields and sends the document to the AI.
3. The AI returns a structured response containing each field's extracted value, a normalized version of that value, and a confidence score.
4. Extracted data is validated against the configured field types (e.g. valid date, valid email format) and against any configured document validity rules.
5. If a required field is missing, fails validation, is low-confidence, or the document has expired, the session is flagged.&#x20;

***

#### **Data extracted per field**

For each configured field, the system stores:

<table><thead><tr><th width="134.33984375">Property</th><th>Description</th></tr></thead><tbody><tr><td>Value</td><td>The normalized, validated value (e.g. <code>EUR</code>, <code>2026-06-01</code>)</td></tr><tr><td>Raw value</td><td>The value exactly as it appeared in the document, before normalization (e.g. <code>€</code>, <code>01 Jun 2026</code>)</td></tr><tr><td>Confidence</td><td>A 0–100 score indicating how confident the AI is in the extracted value</td></tr><tr><td>Validation status</td><td>Whether the value passed, failed, or was not found</td></tr></tbody></table>

Raw and normalized values are both retained, so operators can see exactly what the AI read versus what the system interpreted it as.

***

#### **Document validity**

Administrators can optionally enforce a maximum document age, based on a date extracted from the document itself (e.g. issue date or statement date). If the extracted date falls outside the configured window, the document is treated as expired.

***

#### **Confidence thresholds**

A confidence threshold (default: 80) determines when an extracted field is considered reliable. Any field extracted below this threshold is flagged for manual review. Thresholds can be set once for the entire step, and optionally overridden for individual fields that require stricter accuracy (e.g. a salary amount vs. a reference number).

***

### **Enabling the feature**

**How to enable:** Add an **AnyDoc** step in the Configuration builder and define the document type, allowed formats, fields to extract, and any validity or confidence rules.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Via the No-code workflow builder:</strong><br>Configure the step directly in the Configuration builder.</td><td><a href="/pages/TDDeRXDR3qst5wOR0CYs#anydoc-reader">/pages/TDDeRXDR3qst5wOR0CYs#anydoc-reader</a></td></tr><tr><td><strong>Via API:</strong><br>The step is configured using the <code>anydoc-reader</code> step type. See AnyDoc in the <strong>Developer guide</strong> for the full configuration reference.</td><td><a href="/pages/zp3PlfI2jqthOVkWQNJW#anydoc-reader">/pages/zp3PlfI2jqthOVkWQNJW#anydoc-reader</a></td></tr></tbody></table>


# Android SDK

Welcome to the Identomat Android SDK documentation! Here, you'll find everything you need to integrate our ID verification and KYC/AML solutions into your Android application seamlessly.

{% hint style="info" %}
Latest release: **Version 1.1.188**
{% endhint %}

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-type="content-ref"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>For a detailed guide, please refer to our <strong>GitLab</strong> documentation.</td><td></td><td></td><td></td><td><a href="https://gitlab.identomat.com/world/identomat-example-app-android">https://gitlab.identomat.com/world/identomat-example-app-android</a></td><td><a href="/files/xHuhaeW4cqdRsKdqrauG">/files/xHuhaeW4cqdRsKdqrauG</a></td></tr></tbody></table>

## Integration Document

The Identomat library offers a user identification flow composed of various steps, combining document types with user images or videos.

### The following steps are necessary to start a session using Identomat API

{% stepper %}
{% step %}
[Get a session token and configure session](#id-1.-get-a-session-token-and-configure-session)
{% endstep %}

{% step %}
[Get the instance of Identomat SDK](#id-2.-get-the-instance-of-identomat-sdk-and-pass-data)
{% endstep %}

{% step %}
[Pass Session Token and handle callback](#id-3.-pass-session-token-and-handle-callback)
{% endstep %}

{% step %}
[Start Identomat SDK](#id-4.-start-identomat-sdk)
{% endstep %}

{% step %}
[Pass additional variables](#id-5.-pass-additional-variables)
{% endstep %}
{% endstepper %}

## 1. Get a session token and configure session

To start a session, you first need to acquire a `session_token` by calling the `begin/` endpoint and configuring your verification flow.

> ⚠️ **Note:** This process is identical across Web and SDK integrations.

For full details on how to generate a session token, configure steps and flags, and start a session, please refer to the [**Web integration guide – Session Initialization**](/developer-tools/developer-guide#procedure).

Once you’ve obtained the session token, you can proceed with integrating it into your SDK flow.

## 2. Get the instance of Identomat SDK and pass data

The main class of the Identomat SDK is the `IdentomatManager` class.\
`IdentomatManager` is a singleton class in the Identomat SDK (using Kotlin's `Object` class).

To get the SDK instance, you can do the following:

* **For Java:**\
  You can get the instance by using:

```java
IdentomatManager identomatSdk = IdentomatManager.INSTANCE;
```

* **For Kotlin:**\
  You can use it as `IdentomatManager`, which refers to Kotlin's `Object` class.

## 3. Pass session token and handle callback

* **sessionToken** – Response from the API: `String` type.

To pass the session token, we use the `setUp` function, which can be called like this:

```java
IdentomatManager.INSTANCE.setUp(token: sessionToken);
```

The last step is to pass the callback function, which will be triggered after the user finishes interacting with the library. To do this, use the `.setCallback` function, which takes a function as an argument:

```java
IdentomatManager.INSTANCE.setCallback(() -> {
    // Go to result page;
});
```

## 4. Start Identomat SDK

The library will provide us with the `Intent` for the SDK's main activity, which we can start like this:

```java
startActivity(IdentomatManager.INSTANCE.getIdentomatActivity(MainActivity.this));
```

## 5. Pass additional variables

To customize Identomat library for the app, we have some additional functions:

1. `setColors(colors: Map)` - sets specific colors
2. `setStrings(dict : Map)` - sets specific text strings
3. `setVariables(variables : Map<String, Any?>)` - sets many customizable variables
4. `setLogo(() -> View?)` - sets loading animation, takes function type, which returns view, example usage:
5. `back_button_icon`- Changes the back button icon.
6. `primary_button_width` – Adjusts the width of the primary button.
7. `primary_button_height` – Adjusts the height of the primary button.
8. `liveness_smile_icon`– Changes the liveness smile icon. Example: *UIImage(named: "liveness\_smile\_icon")*

### Deprecated functions (Post version 1.0.21)

Following functions are deprecated after version 1.0.21:

5.0 `skipLivenessInstructions()` - skips liveness instructions

5.1 `setLivenessIcons(neutralFace: Int, smileFace: Int)` - sets liveness icons, send resource int like this: `R.drawable.ic_liveness_neutral_icon`

5.2 `setLivenessRetryIcon(retryIcon: Int?, size : Int)` - sets liveness retry panel's main icon, size sets size of icon

5.3 `setRetryIcon(retryIcon: Int?, size : Int)` - sets document scan view's retry panel's main icon, size sets size of icon

5.4 `setCameraDenyIcon(cameraDenyIcon: Int?, size : Int)` - sets document scan view's retry panel's main icon

5.5 `setButtonCornerRadius(radius : Int)` - sets every button corner radius

5.6 `setPanelElevation(elevation : Int)` - sets panels elevations

***

### 1. Customizing Colors

Use the `setColors` function to adjust the colors in the library to match the app's theme. Pass a dictionary containing the relevant color keys and their corresponding hex values:

```
"background",
"text_primary",
"text_secondary",
"text_placeholder",
"text_disabled",
"text_inverse",
"text_link",
"primary_color",
"neutral_color",
"danger_color",
"success_color",
"warning_color",
"black",
"white"
```

Example of dictionary&#x20;

* **for Java:**

```java
static HashMap colors = new HashMap(){{
    put("background", "#222222");
    put("text_primary", "#A4A4A4");
    put("text_secondary", "#676767");
    put("text_placeholder", "#7848FF");
    put("text_disabled", "#A4A4A4");
    put("text_inverse", "#676767");
    put("text_link", "#7848FF");
    put("primary_color", "#FFFFFF");
    put("neutral_color", "#222222");
    put("danger_color", "#FFFFFF");
    put("success_color", "#2D2D2D");
    put("warning_color", "#FFFFFF");
}};
```

* **for Kotlin:**

```kotlin
var colors : Map<String, String> = mapOf(
    "background" to "#222222",
    "text_primary" to "#FFFFFF",
    ...
    )
```

Way to pass colors to library: `IdentomatManager.setColors(colors: colors)`

### 2. Customizing strings

To customize the strings that the library displays at specific places, we have the function `setStrings(string: Map)`.

The `setStrings` function takes a `Map` where the keys correspond to the string identifiers used in the library, and the values are the strings you want to display for different languages. The structure looks like this:

**Example for Java:**

```java
static HashMap strings = new HashMap(){{
    put("en",  new HashMap<String, String>() {{
        put("identomat_agree", "Yes I agree");
        put("identomat_disagree", "Disagree");
    }});
    put("ru",  new HashMap<String, String>() {{
        put("identomat_agree", "Согласен");
        put("identomat_disagree", "Не согласен");
    }});
    put("es",  new HashMap<String, String>() {{
        put("identomat_agree", "Acepto");
        put("identomat_disagree", "No acepto");
    }});
    put("ka",  new HashMap<String, String>() {{
        put("identomat_agree", "ვეთანხმები");
        put("identomat_disagree", "არ ვეთანხმები");
    }});
}};
```

**for Kotlin:**

```kotlin
 var strings : Map<String, Map<String,String>> = mapOf(
            "en" to mapOf(
                    "identomat_agree" to "Yes I agree",
                    "identomat_disagree" to "Disagree",
            ),
            "ru" to mapOf(
                    "identomat_agree" to "Согласен",
                    "identomat_disagree" to "Не согласен",
            ),
            "es" to mapOf(
                    "identomat_agree" to "Acepto",
                    "identomat_disagree" to "No acepto",
            ),
            "ka" to mapOf(
                "identomat_agree" to "ვეთანხმები",
                "identomat_disagree" to "არ ვეთანხმები",
            )
    )
```

Every string has its own key in library and it can be changed. String keys list is at the end.

### 3. Customizing Variables

For every other customization, we use the `setVariables(variables: Map<String, Any?>)` function, where we pass a key-value pair map of variables.

The map structure looks like this:

```
var variables : MutableMap<String, Any?> = mutableMapOf(
   
    "liveness_neutral_icon" to R.drawable.ic_liveness_neutral_icon,     -- sets liveness neutral face icon.     type -> int
    "liveness_smile_icon" to R.drawable.ic_liveness_smile_icon,         -- sets liveness smile face icon.       type -> int

    "liveness_retry_icon" to R.drawable.image,                          -- sets liveness retry page icon.       type -> int
    "liveness_retry_text_icon_1" to R.drawable.image,                   -- sets liveness retry page instruction icon 1.       type -> int
    "liveness_retry_text_icon_2" to R.drawable.image,                   -- sets liveness retry page instruction icon 2.       type -> int
    "liveness_retry_text_icon_3" to R.drawable.image,                   -- sets liveness retry page instruction icon 3.       type -> int
    "liveness_retry_text_icon_4" to R.drawable.image,                   -- sets liveness retry page instruction icon 4.       type -> int

    "scan_retry_icon" to R.drawable.image,                              -- sets scan document retry page icon.  type -> int
    "camera_deny_icon" to R.drawable.image,                             -- sets camera deny page icon.          type -> int
    "upload_retry_icon" to R.drawable.image,                            -- sets upload retry page icon.         type -> int

    "liveness_retry_icon_size" to 200,                                  -- sets save icon sizes.                type -> int
    "scan_retry_icon_size" to 200,
    "camera_deny_icon_size" to 200,
    "upload_retry_icon_size" to 200,
    
    "location_instruction_icon_1" to R.drawable.image,  
    "location_instruction_icon_2" to R.drawable.image,  

    "geolocation_icon" to R.drawable.image,  
    "geolocation_success_icon" to R.drawable.image,  
    "geolocation_deny_icon" to R.drawable.image,  

    "liveness_retry_count" to 3,                        -- new liveness video upload retry count

    "skip_liveness_instructions" to false,              -- skips liveness instructions                          type -> boolean
    "liveness_type" to 1,                               -- chooses liveness icons display type values 1 or 2    type -> int
    "button_corner_radius" to null,                     -- sets button corner radious, if it's null button will be round cornered              
    "panel_elevation" to 1,                             -- sets panels elevation,                               type -> int

    "liveness_info_main_icon" or "liveness_info_main_anim",      -- instruction page  
    "liveness_frame_face_icon" or "liveness_frame_face_anim",    -- frame page
    "instruction_smile_icon" or "instruction_smile_anim"         -- Liveness processing page 
    
    //Sets  font sizes
    "title_medium_size" to 16,
    "title_small_size" to 14,
    "headline_medium_size" to 28,
    "headline_small_size" to 24,
    "body_medium_size" to 16,
    "body_small_size" to 14
 
    //Sets font
    "title_font" to "font-name",
    "headline_font" to "font-name",
    "body_font" to "font-name"
    
    "default_country_code" to "GE"                      -- sets default country for country code picker
)
```

String keys:

```xml
<resources>

  //ID verification
  <string name="identomat_select_document">Select document</string>
 
  <string name="identomat_card">ID card</string>
  <string name="identomat_card_front_instructions">Scan FRONT SIDE of ID CARD</string>
  <string name="identomat_card_front_upload">Upload FRONT SIDE of ID CARD</string>
  <string name="identomat_card_rear_instructions">Scan BACK SIDE of ID CARD</string>
  <string name="identomat_card_rear_upload">Upload BACK SIDE of ID CARD</string>
 
  <string name="identomat_driver_license">Driver license</string>
  <string name="identomat_driver_license_front_instructions">Scan FRONT SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_front_upload">Upload FRONT SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_rear_instructions">Scan BACK SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_rear_upload">Upload BACK SIDE of DRIVER LICENSE</string>
   
  <string name="identomat_passport">Passport</string>
  <string name="identomat_passport_instructions">Passport photo page</string>
  <string name="identomat_passport_upload">Upload passport photo page</string>
   
  <string name="identomat_residence_permit">Residence permit</string>
  <string name="identomat_residence_permit_front_instructions">Scan FRONT SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_front_upload">Upload FRONT SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_rear_instructions">Scan BACK SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_rear_upload">Upload BACK SIDE of RESIDENCE PERMIT</string>
   
  <string name="identomat_capture_method_title">Choose a method</string>
  <string name="identomat_take_photo">Take a photo</string>
  <string name="identomat_upload_file">Upload a file</string>
  <string name="identomat_upload_another_file">Upload another file</string>
   
  <string name="identomat_upload_instructions_1">Upload a color image of the entire document</string>
  <string name="identomat_upload_instructions_2">JPG or PNG format only</string>
  <string name="identomat_upload_instructions_3">Screenshots are not allowed</string>
  <string name="identomat_choose_file">Choose a file</string>
   
  <string name="identomat_verifying">Verifying...</string>
  <string name="identomat_uploading">Uploading...</string>
   
  <string name="identomat_scan_retry_title">Capture failed</string>
  <string name="identomat_scan_retry_instruction">Please try again in better lighting</string>
  <string name="identomat_scan_retry_again">Try again</string>
  <string name="identomat_upload_success">Successfully uploaded!</string>
   
  <string name="identomat_no_document_in_image">Frame your document</string>
  <string name="identomat_document_align">Frame your document</string>
  <string name="identomat_document_blurry">Document is blurry</string>
  <string name="identomat_document_face_blurry">Face on document is blurry</string>
  <string name="identomat_document_face_require_brighter">Low light</string>
  <string name="identomat_document_face_too_bright">Avoid direct light</string>
  <string name="identomat_document_move_away">Please move document away</string>
  <string name="identomat_document_move_closer">Please move document closer</string>
  <string name="identomat_document_move_down">Please move document down</string>
  <string name="identomat_document_move_left">Please move document to the left</string>
  <string name="identomat_document_move_right">Please move document to the right</string>
  <string name="identomat_document_move_up">Please move document up</string>
  <string name="identomat_document_covered">Document is covered</string>
  <string name="identomat_document_grayscale">Document is grayscale</string>
  <string name="identomat_document_type_mismatch">Wrong document</string>
  <string name="identomat_document_not_readable">Document not readable</string>
  <string name="identomat_document_face_align">Document face align</string>
  <string name="identomat_document_spoofing_detected2">Document spoofing detected</string>
  <string name="identomat_document_page_mismatch">Wrong page</string>
  <string name="identomat_document_nfc_chip_damaged">Document NFC chip damaged</string>
   
   
  //Passive liveness
  <string name="identomat_face_instructions">Place your FACE within OVAL</string>
  <string name="identomat_processing">Processing, please wait</string>
   
   
  // Active liveness
  <string name="identomat_record_begin_section_1">Take a neutral expression</string>
  <string name="identomat_record_begin_section_2">Smile on this sign</string>
  <string name="identomat_record_begin_section_3">Take a neutral expression again</string>
  <string name="identomat_record_begin_title">Get ready for your video selfie</string>
  <string name="identomat_record_instructions">Place your FACE within OVAL and follow the on-screen instructions</string>
  <string name="identomat_im_ready">I\'m ready</string>
  <string name="identomat_neutral_expression">Neutral face</string>
  <string name="identomat_smile">Smile</string>
   
   
  // Adaptive liveness
 <string name="identomat_passive_record_begin_title">Get ready for your video selfie</string>
 <string name="identomat_passive_record_begin_subtitle">Follow the on-screen instructions when prompted.</string>
 <string name="identomat_passive_record_begin_subtitle_smile">When prompted, repeat the facial expression shown on the icons.</string>
 <string name="identomat_passive_record_begin_section_title">Tips</string>
 <string name="identomat_passive_record_begin_section_1">Frame your face</string>
 <string name="identomat_passive_record_begin_section_2">Hold still until success notify</string>
 <string name="identomat_smile">Smile</string>
 <string name="identomat_im_ready">I\'m ready</string>
   
   
  //Cascading liveness
  <string name="identomat_cascading_instructions">When prompted, repeat the facial expression shown on the icons: \n\n<b>• Keep neutral face \n• Smile</b></string>
  <string name="identomat_cascading_instructions_title">When prompted, repeat the facial expression shown on the icons:</string>
  <string name="identomat_cascading_instructions_1">• Keep neutral face</string>
  <string name="identomat_cascading_instructions_2">• Smile</string>
  <string name="identomat_cascading_button">Start Liveness Check</string>
  <string name="identomat_cascading_neutral_face">Keep neutral face</string>
  <string name="identomat_cascading_start">Position your face!</string>
  <string name="identomat_cascading_smile">Smile!</string>
  <string name="identomat_cascading_fail">Liveness Failed</string>
  <string name="identomat_cascading_success">That\'s it!</string>
   
  <string name="identomat_liveness_retry_title">We can\'t detect your face</string>
  <string name="identomat_liveness_retry_instruction">But first, please take a look at the instructions</string>
  <string name="identomat_liveness_retry_again">Try again</string>
  <string name="identomat_liveness_retry_instruction_1">Make sure to be in a place with good lighting</string>
  <string name="identomat_liveness_retry_instruction_2">Make sure your eyes are clearly visible</string>
  <string name="identomat_liveness_retry_instruction_3">Make sure to remove masks or other items that cover your face. Eyeglasses are okay</string>
  <string name="identomat_liveness_retry_instruction_4">Make sure to only show your face, we don’t need to see your ID</string>
   
  <string name="identomat_lets_try">Let\'s try</string>
   
  <string name="identomat_low_neutral_frequency">Untimely smile detected</string>
  <string name="identomat_not_smile">Smile not detected</string>
  <string name="identomat_eyes_closed">Eyes are closed</string>
  <string name="identomat_face_hold">Hold still</string>
  <string name="identomat_no_face">Face is missing</string>
  <string name="identomat_face_covered">Face is covered</string>
  <string name="identomat_face_align">Frame your face</string>
  <string name="identomat_face_away_from_center">Center your Face</string>
  <string name="identomat_face_blurry">Face is blurry</string>
  <string name="identomat_face_far_away">Move closer</string>
  <string name="identomat_face_require_brighter">Low light</string>
  <string name="identomat_face_too_bright">Avoid direct light</string>
  <string name="identomat_face_too_close">Move away</string>
  <string name="identomat_smile_detected">Get neutral face</string>
  <string name="identomat_multiple_face">Keep only your face visible</string>
   
   
  //Camera permission
  <string name="identomat_camera_deny_title">Camera access denied</string>
  <string name="identomat_camera_deny_settings">Allow access</string>
  <string name="identomat_camera_deny_cancel">Cancel process</string>
   
   
  //Phone number collect&verify
  <string name="identomat_resend_code">Resend Code</string>
  <string name="identomat_get_code">Get Code</string>
  <string name="identomat_sms_title">Verify Phone Number</string>
  <string name="identomat_sms_subtitle">Enter your correct phone number\nto get verification code</string>
  <string name="identomat_resend_in">Resend code in </string>
  <string name="identomat_invalid_number">Please enter valid number</string>
  <string name="identomat_invalid_code">The code is not valid</string>
  <string name="identomat_sms_code_sent">Enter the 4-digit verification code sent to </string>
  <string name="identomat_enter_sms_code">Enter SMS code</string>
  <string name="identomat_phone_number_hint">Phone number</string>
  <string name="identomat_enter_phone_number">Enter phone number</string>
  <string name="identomat_enter_correct_number">Enter your correct phone number</string>
  <string name="identomat_confirm">Confirm</string>
  <string name="identomat_search">Search</string>
  <string name="identomat_verify_enter_code_hint">Enter code</string>
   
   
  // Email collect & verify
  <string name="identomat_enter_email_address">Enter email address</string>
  <string name="identomat_enter_correct_email">Enter your correct email address</string>
  <string name="identomat_enter_valid_email">Please enter valid email</string>
  <string name="identomat_email_hint">Email address</string>
  <string name="identomat_confirm">Confirm</string>
  <string name="identomat_email_check_title">Verify Email</string>
  <string name="identomat_email_check_subtitle">Enter your correct email address\nto get verification code</string>
  <string name="identomat_get_code">Get Code</string>
  <string name="identomat_resend_in">Resend code in </string>
  <string name="identomat_resend_code">Resend Code</string>
  <string name="identomat_verify_email_code_title">Enter code</string>
  <string name="identomat_verify_email_code_subtitle">Enter the 6-digit verification code sent to </string>
  <string name="identomat_verify_email_invalid_code">The code is not valid</string>
  <string name="identomat_verify_enter_code_hint">Enter code</string>
   
   
  //Page titles
  <string name="identomat_require_email_header"> </string>
  <string name="identomat_require_phone_number_header"> </string>
  <string name="identomat_require_phone_number_check_header"> </string>
  <string name="identomat_enter_sms_code_header"> </string>
  <string name="identomat_select_documents_header"> </string>
  <string name="identomat_capture_methods_header"> </string>
  <string name="identomat_upload_header"> </string>
  <string name="identomat_new_liveness_header"> </string>
  <string name="identomat_camera_access_header"> </string>
  <string name="identomat_select_country">Select country</string>
  <string name="identomat_retry_header"> </string>
   
   
  //Geolocation
  <string name="identomat_send_location_button">Send Location</string>
  <string name="identomat_geolocation_title">Allow location access</string>
  <string name="identomat_geolocation_subtitle">To continue the verification, we need access to your device\'s location.</string>
  <string name="identomat_geolocation_success">Your profile has been verified.</string>
   
  <string name="identomat_geolocation_deny_title">Location access denied</string>
  <string name="identomat_geolocation_deny_subtitle">We can’t identify you without your location</string>
  <string name="identomat_geolocation_deny_instruction_1">You can recover location access through your device settings</string>
  <string name="identomat_geolocation_deny_instruction_2">Go to app settings and enable location access for this app</string>
  <string name="identomat_geolocation_enable_button">Enable in settings</string>
  <string name="identomat_geolocation_cancel_button">Cancel process</string>
   
   
  //Proof of Address
  <string name="identomat_bank_statement">Bank Statement</string>
  <string name="identomat_utility_bill">Utility bill</string>
  <string name="identomat_vehicle_registration_certificate">Vehicle registration certificate</string>
  <string name="identomat_yellow_slip">Yellow slip</string>
  <string name="identomat_drivers_license">Driver\'s license</string>
   
  <string name="identomat_upload_bank_statement">Upload Bank Statement</string>
  <string name="identomat_upload_utility_bill">Upload Utility bill</string>
  <string name="identomat_upload_vehicle_registration_certificate">Upload Vehicle registration certificate</string>
  <string name="identomat_upload_yellow_slip">Upload Yellow slip</string>
  <string name="identomat_upload_drivers_license">Upload Driver\'s license</string>
  <string name="identomat_upload_document_subtitle">Make sure that all the information on the photo is visible and easy to read</string>
   
  <string name="identomat_select_document_title">Select Document</string>
  <string name="identomat_proof_of_address_title">Proof of Address</string>
  <string name="identomat_proof_of_address_subtitle">Please upload a document that confirms your residential address.</string>
  <string name="identomat_uploaded">Uploaded</string>
  <string name="identomat_document_errors">Document Errors</string>
   
  <string name="identomat_expired_date_was_not_found">Expiry date was not found in the document</string>
  <string name="identomat_issued_date_was_not_found">Issue date was not found in the document</string>
  <string name="identomat_full_name_does_not_match">Full name does not match</string>
  <string name="identomat_full_name_was_not_found">Full name was not found in the document</string>
  <string name="identomat_issuing_authority_name_was_not_found">Issuing authority name was not found in the document</string>
  <string name="identomat_street_address_was_not_found">Street address was not found in the document</string>
  <string name="identomat_document_expired">Document is expired</string>
  <string name="identomat_address_not_valid">Address not valid</string>
  <string name="identomat_document_date_is_in_the_future">Document date is in the future</string>
  <string name="identomat_document_not_matched">Document not matched</string>
  <string name="identomat_oversized_file">Oversized File: Maximum file size is 5MB</string>
  <string name="identomat_unsupported_file_type">File Format Mismatch</string>
  <string name="identomat_too_many_pages">Too many Pages: Maximum pages is 20</string>
   
  <string name="identomat_continue">Continue</string>
  <string name="identomat_no_connection">No internet connection</string>
  
  
  <string name="identomat_nfc_next">Next</string>
  <string name="identomat_nfc_start_scanning">Start Scanning</string>
  <string name="identomat_nfc_check_id">Check for the NFC chip in your ID</string>
  <string name="identomat_nfc_check_passport">Check for the NFC chip in your Passport</string>
  <string name="identomat_nfc_subtitle_id">Make sure the ID card has appropriate symbols on it</string>
  <string name="identomat_nfc_subtitle_id_1">Flip the ID card and scan the back side</string>
  <string name="identomat_nfc_subtitle_passport">Make sure the passport has appropriate symbols on it</string>
  <string name="identomat_nfc_subtitle_passport_1">Open the passport to the photo page and scan it</string>
  <string name="identomat_nfc_scan_the_document">Scan the document</string>
  <string name="identomat_nfc_read_id_error_1">Remove your document and phone covers</string>
  <string name="identomat_nfc_read_id_error_2">Ensure that your document has NFC capability</string>
  <string name="identomat_nfc_read_id_error_3">Keep your document and phone still until the progress bar is filled</string>
  <string name="identomat_nfc_read_error_key_missmatch">Please scan the document again or choose another method</string>
  <string name="identomat_nfc_read_error_button_1">Retry reading</string>
  <string name="identomat_nfc_read_error_button_2">Try another method</string>
  <string name="identomat_nfc_read_id_title">Read the NFC chip on your ID</string>
  <string name="identomat_nfc_read_desc">Follow instructions below</string>
  <string name="identomat_nfc_read_warning">Do not separate the document and the phone during the reading process</string>
  <string name="identomat_nfc_read_warning_1">Keep your phone and document still</string>
  <string name="identomat_nfc_reading">Reading...</string>
  <string name="identomat_nfc_dialog_title">NFC not enabled</string>
  <string name="identomat_nfc_dialog_message">To enable it, please navigate to the NFC settings and toggle the switch to on.</string>
  <string name="identomat_nfc_dialog_settings">Settings</string>
  <string name="identomat_nfc_dialog_cancel">Cancel</string>
  
  <string name="identomat_nfc_scan_passport_title">Passport photo page</string>
  <string name="identomat_nfc_error_title">We couldn\'t read NFC on your document</string>
  <string name="identomat_nfc_ready_to_read">Ready to read</string>
  <string name="identomat_nfc_id_place_phone">Place your phone on your ID</string>
  <string name="identomat_nfc_passport_place_phone">Place your phone on your passport</string>
  <string name="identomat_nfc_read_passport_title">Read the NFC chip on your Passport</string>
  <string name="identomat_nfc_read_id_inst_1">Place your ID card at the back of your phone</string>
  <string name="identomat_nfc_read_passport_inst_1">Place your passport at the back of your phone</string>
  <string name="identomat_nfc_read_inst_2">Slowly slide your document up and down</string>
  <string name="identomat_nfc_read_inst_3">Once the reading starts, hold your document and phone still</string>
  <string name="identomat_nfc_button_start_reading">Start reading</string>
  <string name="identomat_nfc_scan">NFC Scan</string>
  
  <string name="identomat_nfc_header"> </string>
  <string name="identomat_nfc_reading_complete">Reading Complete</string>
  
  //Social Security Number verification
  <string name="identomat_ssn_consent_header">SSN verification</string>
  <string name="identomat_ssn_consent_title">Authorization for the Social Security Administration to disclose your social security number verification</string>
  <string name="identomat_ssn_consent_document">I authorize the Social Security Administration (SSA) to verify and disclose to the requesting party whether the name, Social Security Number (SSN), and date of birth I have submitted matches information in SSA records.</string>
  <string name="identomat_ssn_consent_agree">Agree</string>
  <string name="identomat_ssn_verification_header"> </string>
  <string name="identomat_ssn_title">Confirm your identity</string>
  <string name="identomat_ssn_subtitle">Enter your details exactly as they appear on your government-issued ID.</string>
  <string name="identomat_ssn_first_name_hint">First Name</string>
  <string name="identomat_ssn_last_name_hint">Last Name</string>
  <string name="identomat_ssn_dob_hint">Choose date</string>
  <string name="identomat_ssn_hint">000-00-0000</string>
  <string name="identomat_ssn_confirm_hint">000-00-0000</string>
  <string name="identomat_ssn_mismatch_error">The numbers you entered don\'t match. Please try again.</string>
  <string name="identomat_ssn_api_error">An error occurred. Please try again.</string>
  <string name="identomat_ssn_verify">Verify</string>
  <string name="identomat_ssn_consent_declined_title">Verification Declined</string>
  <string name="identomat_ssn_consent_declined_description">SSN consent was declined. This verification session has ended.</string>
  <string name="identomat_ssn_mismatch_title">Verification Failed</string>
  <string name="identomat_ssn_mismatch_description">Your information did not match SSA records. This session has ended.</string>
  <string name="identomat_ssn_deceased_title">Verification Failed</string>
  <string name="identomat_ssn_deceased_description">We Couldn\'t validate your SSN</string>

  <string name="identomat_ssn_confirm_identity_title">Confirm your identity</string>
  <string name="identomat_ssn_confirm_identity_subtitle">Enter your details exactly as they appear on your government-issued ID.</string>
  <string name="identomat_ssn_first_name_label">First name</string>
  <string name="identomat_ssn_middle_name_label">First name (optional)</string>
  <string name="identomat_ssn_middle_name_hint">Middle name</string>
  <string name="identomat_ssn_last_name_label">Last name</string>
  <string name="identomat_ssn_dob_label">Date of birth</string>
  <string name="identomat_ssn_choose_date">Choose date</string>
  <string name="identomat_ssn_section_title">Enter your Social Security Number</string>
  <string name="identomat_ssn_section_subtitle">Provide your 9-digit SSN for identity verification. Your number is used solely to confirm your identity and is not stored on our servers.</string>
  <string name="identomat_ssn_number_label">Social Security Number</string>
  <string name="identomat_ssn_confirm_number_label">Confirm Social Security Number</string>
  <string name="identomat_ssn_mismatch_detail_error">The numbers you entered don\'t match. Please try again.</string>
  <string name="identomat_ssn_encrypted_title">Your data is encrypted</string>
  <string name="identomat_ssn_encrypted_message">Your information is encrypted in transit using 256-bit SSL and sent directly to the SSA. We do not store your full SSN.</string>
  <string name="identomat_ssn_consent_disclosure_title">One-time disclosure consent</string>
  <string name="identomat_ssn_consent_disclosure_body">This consent is for a one-time disclosure and is valid for 90 days from the date of signature.</string>
  <string name="identomat_ssn_success_title">Verification successful</string>
  <string name="identomat_ssn_success_description">Your SSN has been validated</string>
  
</resources>
```

### 4. Setting a custom logo

`setLogo(() -> View?)` This function is used for setting a custom logo in the library. You can pass your own custom view, and display anything on that view (animations, images, etc.). This logo will be displayed when the library is processing something.

***


# Android SDK changelog

Keep track of changes and upgrades to the Identomat Android SDK.

{% hint style="info" %}
**Breaking changes are marked in bold.**
{% endhint %}

### Version 1.1.188

*Released on Aug 13, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.187

*Released on Jul 17, 2026*

* **Added: Social Security Number verification step**\
  This step allows users to securely submit and verify their Social Security Number as part of the identity verification flow, helping validate their identity and meet compliance requirements.

### Version 1.1.186

*Released on Jul 03, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.185

*Released on Jun 24, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.184

*Released on Jun 11, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.183

*Released on May 08, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.182

*Released on May 01, 2026*

* **Added: Document data review page.** \
  Users can now review and edit extracted document data before submission. For implementation details, please refer to our [Developer guide](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification).

### Version 1.1.181

*Released on Apr 16, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.180

*Released on Apr 15, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.179

*Released on Mar 25, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.178

*Released on Mar 17, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.177

*Released on Mar 11, 2026*

* **Added: Ability to include a Email verification step.**

### Version 1.1.176

*Released on Feb 25, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.175

*Released on Feb 13, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.174

*Released on Feb 12, 2026*

* **Added:** Ability to override specific element colors for enhanced UI customization:
  * `input_active_border_color` – Active state border color for input fields.
  * `input_default_border_color` – Default border color for input fields.
  * `button_secondary_outline_color` – Outline color for secondary buttons.
  * `button_secondary_text_color` – Text color for secondary buttons.

### Version 1.1.173

*Released on Feb 09, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.172

*Released on Feb 02, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.171

*Released on Jan 29, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.170

*Released on Jan 28, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.169

*Released on Jan 14, 2026*

* **Added**: **NFC reader support**.&#x20;

To enable NFC in the [ID document step](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification), the `allow_nfc_capture: true` flag must be provided.&#x20;

### Version 1.1.168

*Released on Jan 12, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.167

*Released on Dec 30, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.166

*Released on Dec 22, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.165

*Released on Dec 19, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.164

*Released on Dec 15, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.163

*Released on Dec 08, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.162

*Released on Nov 27, 2025*

* **Improved**: Existing security checks now detect altered system integrity more accurately.

### Version 1.1.160

*Released on Oct 13, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.159

*Released on Oct 07, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.158

*Released on Sep 29, 2025*

* **Added: Ability to include a Proof of Address (POA) step.**

### Version 1.1.157

*Released on Sep 17, 2025*

* **Added: Ability to include a Geolocation step.**

### Version 1.1.156

*Released on Sep 16, 2025*

* **Added**: Ability to customize icons on the adaptive liveness instruction page.

### Version 1.1.155

*Released on Sep 09, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.154

*Released on Sep 01, 2025*

* **Added**: Support for 16 KB page size, resulting in various performance improvements.
* **Fixed**: Liveness issue caused by camera resolution settings.

### Version 1.1.153

*Released on Aug 22, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.151

*Released on Aug 18, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.150

*Released on Aug 05, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.147

*Released on July 29, 2025*

* **Fixed:** Various bugs related to the user questionnaire step.

### Version 1.1.146

*Released on July 23, 2025*

* **Added: Ability to include a user questionnaire step.**

For implementation details, please refer to our [Developer guide](/developer-tools/developer-guide#user-questionnaire).

### Version 1.1.145

*Released on July 11, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.144

*Released on July 03, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.143

*Released on July 02, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.142

*Released on June 26, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.139

*Released on June 04, 2025*

* **Updated:** Security by preventing access from devices with altered system integrity.

### Version 1.1.138

*Released on May 23, 2025*

* **Fixed:** Various bugs and performance improvements.
* **Updated:** Kotlin version to 2.1.21.

### Version 1.1.136

*Released on March 29, 2025*

* **Added**: Ability to capture full HD photos.
* **Changed**: Parameters for fonts, font sizes, and colors.
  * **Set font**&#x20;
    * `head1_font` changed to `headline_font`
    * `head2_font` was <mark style="color:red;">removed</mark>.
  * **Set font size**
    * `title_font_size` changed to `title_medium_size`
    * `head1_font_size` changed to `headline_medium_size`
    * `body_font_size` changed to `body_medium_size`
    * `title_small_size` was <mark style="color:green;">added</mark>.&#x20;
    * `headline_small_size` was <mark style="color:green;">added</mark>.&#x20;
    * `body_small_size` was <mark style="color:green;">added</mark>.&#x20;
  * **Set font colors**
    * `text_color_header` changed to `text_primary`
    * `text_color_title` was <mark style="color:red;">removed</mark>.
    * `text_color` was <mark style="color:red;">removed</mark>.
    * `text_secondary` was <mark style="color:green;">added</mark>.&#x20;
    * `text_placeholder` was <mark style="color:green;">added</mark>.&#x20;
    * `text_disabled` was <mark style="color:green;">added</mark>.&#x20;
    * `text_inverse` was <mark style="color:green;">added</mark>.&#x20;
    * `text_link` was <mark style="color:green;">added</mark>.&#x20;

### Version 1.1.134

*Released on March 26, 2025*

* **Fixed**: Icon on the retry page wasn't updating according to the primary color.

### Version 1.1.133

*Released on March 20, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.132

*Released on March 18, 2025*

* **Fixed:** Phone number and email verification fields were incorrectly cleared when clicking back button.

### Version 1.1.129

*Released on March 12, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.127 (Beta release)

*Released on March 04, 2025*

* **Added:** Automatic mobile brightness adjustment during liveness detection for a better user experience.

### Version 1.1.126 (Beta release)

*Released on February 25, 2025*

* **Added**: New liveness detection feature for enhanced identity verification.

### Version 1.1.125

*Released on February 17, 2025*

* **Added**: New variables for UI customization:
  * `back_button_icon` – Changes the back button icon.
  * `primary_button_width` – Adjusts the width of the primary button.
  * `primary_button_height` – Adjusts the height of the primary button.
  * `liveness_smile_icon`– Changes the liveness smile icon. Example: *UIImage(named: "liveness\_smile\_icon")*

### Version 1.1.123

*Released on February 12, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.123

*Released on February 7, 2025*

* **Added**: Country code selection for phone number collection and verification steps.
* **Added**: Ability to customize the back button icon.

### Version 1.1.122

* **Fixed**: Input and text alignment issues on phone number collection, phone number verification, email collection, and email verification steps.

### Version 1.1.120

* **Added**: **New liveness detection feature for enhanced identity verification.**&#x20;

### Version 1.1.119

* **Fixed**: Crash issue on Android 7 during verification process.

### Version 1.1.118

* **Internal** changes only

### Version 1.1.117

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.116

* **Fixed**: "Eyes closed" error was displayed incorrectly.

### Version 1.1.115

* **Changed**: Flag name for phone number verification.&#x20;
  * `require_sms_verification` changed to `require_phone_number_check`

### Version 1.1.114

* **Updated**: Material library version upgraded.&#x20;

### Version 1.1.113

* **Updated**: Material library version upgraded.

### Version 1.1.112

* **Fixed**: Text alignment adjusted on the retry page, now centered towards emojis.

### Version 1.1.111

* **Changed**: UI of the liveness retry page updated for improved user experience.

### Version 1.1.110

* **Fixed**: Various bugs in document capture functionality.

### Version 1.1.109

* **Added**: Vehicle registration certificate reader in the Proof of Address step.

### Version 1.1.104

* **Improved**: Reduced passive liveness capturing time for faster verification.

### Version 1.1.103

* **Fixed**: Session lifetime issue in SDK sessions, ensuring proper session expiration.

### Version 1.1.102

* **Fixed**: Blurring issue on Samsung Galaxy S24 and Samsung Galaxy S24 Ultra cameras.

### Version 1.1.101

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version 1.1.100

* **Added**: Ability to change the country code on phone number collection and verification steps.

### Version 1.1.99

* **Changed**: Liveness icon and uploading text color are now separately customizable.

### Version 1.1.98

* **Added**: Ability to translate texts on phone number collection and verification steps.

### Version 1.1.97

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version 1.1.96

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version 1.1.95

* **Fixed**: Bugs related to the cascading functionality retry update.

### Version 1.1.94

* **Added**: Design customization options for phone number collection and verification steps.

### Version 1.1.93

* **Added**: Retry functionality to the cascading process.

### Version 1.1.92

* **Changed:** Passive liveness and cascading functionality combined for improved performance.

### Version 1.1.91

* **Fixed**: Application crash issue during video calls.

### Version 1.1.90

* **Added**: Ability to show or hide camera and mic buttons for the user.

### Version 1.1.89

* **Added**: Camera permission logs for better troubleshooting and debugging.
  * `camera-access-request`
  * `camera-access-acquire`
  * `camera-access-reject`


# iOS SDK

Welcome to the Identomat iOS SDK documentation! Here, you'll find everything you need to integrate our ID verification and KYC/AML solutions into your iOS application seamlessly.

{% hint style="info" %}
Latest release: **Version 1.1.171**
{% endhint %}

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>For a detailed guide, please refer to our <strong>GitLab</strong> documentation.</td><td></td><td><a href="/files/xHuhaeW4cqdRsKdqrauG">/files/xHuhaeW4cqdRsKdqrauG</a></td><td><a href="https://gitlab.identomat.com/world/identomat-ios-framework-spm">https://gitlab.identomat.com/world/identomat-ios-framework-spm</a></td></tr></tbody></table>

## Integration Document

The Identomat library provides a user identification flow consisting of various steps that combine document type and user image/video for verification.

### Following steps are necessary to start a session using Identomat API

{% stepper %}
{% step %}
[Get a session token and configure session](#id-1.-get-a-session-token-and-configure-session)
{% endstep %}

{% step %}
[Get the instance of Identomat SDK](#id-3.-get-the-instance-of-identomat-sdk-and-pass-data)
{% endstep %}

{% step %}
[Pass Session Token and handle callback](#id-4.-pass-session-token-and-handle-callback)
{% endstep %}

{% step %}
[Start Identomat SDK](#id-5.-start-identomat-sdk)
{% endstep %}

{% step %}
[Pass additional variables](#id-6.-pass-additional-variables)
{% endstep %}
{% endstepper %}

## 1. Get a session token and configure session

To start a session, you first need to acquire a `session_token` by calling the `begin/` endpoint and configuring your verification flow.

> ⚠️ **Note:** This process is identical across Web and SDK integrations.

For full details on how to generate a session token, configure steps and flags, and start a session, please refer to the [**Web integration guide – Session Initialization**](/developer-tools/developer-guide#procedure).

Once you’ve obtained the session token, you can proceed with integrating it into your SDK flow.

## 2. Get the instance of Identomat SDK and pass data

The main class of the Identomat SDK is the `IdentomatManager` class.\
`IdentomatManager` is a singleton class in the Identomat SDK.

To obtain the SDK variable, you can use the following code:

```swift
let indetomatSdk = IdentomatManager.getInstance();
```

Alternatively, you can call `IdentomatManager.getInstance()` each time, and it will return the same Identomat SDK instance.

## 3. Pass session token and handle callback <a href="#id-4.-pass-session-token-and-handle-callback" id="id-4.-pass-session-token-and-handle-callback"></a>

* **sessionToken** – Response from the API: `String` type.

To pass the session token, we use the `setUp` function, which can be called like this:

```swift
IdentomatManager.getInstance().setUp(token: sessionToken)
```

The last step is to pass the callback function, which will be triggered after the user finishes interacting with the library. To do this, use the `.callback` function, which takes a function as an argument:

```swift
IdentomatManager.getInstance().callBack(callback: anyfunc)
//anyfunc is (()->Void)? type
//or
IdentomatManager.getInstance().callBack {
   print("finished")
}

IdentomatManager.getInstance().backButtonCallBack(callback: anyfunc)
/anyfunc is (()->Void)? type
//or
IdentomatManager.getInstance().backButtonCallBack {
   print("finished with back button")
}
```

## 4. Start Identomat SDK

First, you should obtain the library's starter view, and then present it to the user.

{% code overflow="wrap" %}

```swift
let identomatView = IdentomatManager.getInstance().getIdentomatView()
identomatView.modalPresentationStyle = .fullScreen
self.present(identomatView, animated: true, completion: nil)  //self is UIViewController type class
```

{% endcode %}

## 5. Pass additional variables

To customize Identomat library for the app, we have some additional functions:

1. `setColors(colors: [String : String])` - sets specific colors 2.1 `setStringsTableName(tableNme : String)` - sets string by the languages file 2.2 `setStrings(dict : [String : Any?])` - sets specific text strings
2. `setVariables(variables : [String : Any?])` - sets many customizable varaible
3. `setLogo(view: UIView)` - sets loading indicator

Following functions in 5 are DEPRECATED after 0.0.73 version&#x20;

5.1  `setTitleFont(fontname: String, size : Int)` - sets header font in library

5.2 `setHeadlineFont(fontname: String, size : Int)` - sets header font in library

5.3 `setBodyFont(fontname: String, size : Int )` - sets body text font in library

5.4 `skipLivenessInstructions()` - skips liveness instructions

5.5 `setLivenessIcons(neutralFace: UIImage?, smileFace: UIImage?)` - sets liveness icons

5.6 `setLivenessRetryIcon(retryIcon: Int?, size : Int)` - sets liveness retry panel's main icon, size sets size of icon

5.7 `setRetryIcon(retryIcon: Int?, size : Int)` - sets document scan view's retry panel's main icon, size sets size of icon

5.8 `setCameraDenyIcon(cameraDenyIcon: Int?, size : Int)` - sets document scan view's retry panel's main icon&#x20;

5.9 `hideStatusBar(_ bool : Bool), setStatusBarStyle(style : UIStatusBarStyle)` - customize status bar

***

### 1. Customizing colors

Use the `setColors` function to adjust the colors in the library to match the app's theme. Pass a dictionary containing the relevant color keys and their corresponding hex values:

```
"background",
"text_primary",
"text_secondary",
"text_placeholder",
"text_disabled",
"text_inverse",
"text_link",
"primary_color",
"neutral_color",
"danger_color",
"success_color",
"warning_color",
"black",
"white"
```

Way to pass colors to library:&#x20;

```swift
IdentomatManager.getInstance().setColors(colors: colors)
```

### 2. Customizing strings <a href="#user-content-2" id="user-content-2"></a>

To customize the strings displayed by the library at specific places, you can use two functions:

1. `setStrings(dict: [String: Any?])`
2. `setStringsTableName(tableNme : String)`

These are two different methods to customize strings.

The `setStrings` function takes a dictionary with specific keys for different languages. The structure looks like this:

```swift

static var strings : [String : Any?] = [
    "en" : [
        "identomat_agree" : "Yes I Agree",
    ],
    "ru" : [
        "identomat_agree": "Согласен",
    ],
    "es" : [
        "identomat_agree": "Acepto",
    ],
    "ka" : [
        "identomat_agree": "ვეთანხმები",
    ]
]
```

In the second approach, you use the `setStringsTableName(tableName: String)` function, where you create a `.strings` file in your project and localize it for different languages, just like you would do for your app.

Here's how you can use this method:

1. Create a `.strings` file, for example, `languages.strings`.
2. Localize the file for different languages as you normally would in your project.
3. Pass the name of the `.strings` file (without the extension) to the library, like this:

```swift
setStringsTableName(tableNme : "languages")
```

### 3. Customizing variables <a href="#id-3.-customizing-variables" id="id-3.-customizing-variables"></a>

For every other customization, we use the `setVariables(variables: Map<String, Any?>)` function, where we pass a key-value pair map of variables.

The map structure looks like this:

```swift
static var variables : [String : Any?] = [
    "back_button_icon": UIImage(named: "image_name"),                         -- sets back button icon. type -> UIImage
    "liveness_neutral_icon" : UIImage(named: "liveness_neutral_icon"),        -- sets liveness neutral face icon. type -> UIImage
    "liveness_smile_icon" : UIImage(named: "liveness_smile_icon"),            -- sets liveness smile face icon.       type -> UIImage
    "liveness_neutral_icon_record" : UIImage(named: "liveness_neutral_icon"), -- sets liveness neutral face icon while recording. type -> UIImage
    "liveness_smile_icon_record" : UIImage(named: "liveness_smile_icon"),     -- sets liveness smile face icon  while recording. type -> UIImage

    "liveness_retry_icon" : UIImage(named: "image_name"),           -- sets liveness retry page icon. type -> UIImage
    "liveness_retry_text_icon_1" : UIImage(named: "image_name"),    -- sets liveness retry first instruction icon.  type -> UIImage
    "liveness_retry_text_icon_2" : UIImage(named: "image_name"),    -- sets liveness retry second instruction icon. type -> UIImage
    "liveness_retry_text_icon_3" : UIImage(named: "image_name"),    -- sets liveness retry third instruction icon. type -> UIImage
    "liveness_retry_text_icon_4" : UIImage(named: "image_name"),    -- sets liveness retry fourth instruction icon. type -> UIImage
    "scan_retry_icon" : UIImage(named: "image_name"),               -- sets scan document retry page icon. type -> UIImage
    "camera_deny_icon" : UIImage(named: "image_name"),              -- sets camera deny page icon. type -> UIImage
    "upload_retry_icon" : UIImage(named: "image_name"),             -- sets upload retry page icon. type -> UIImage

    "liveness_retry_icon_size" : 200,     -- sets save icon sizes. type -> int
    "scan_retry_icon_size" : 200,
    "camera_deny_icon_size" : 200,
    "upload_retry_icon_size" : 200,
    "liveness_retry_text_icon_1_size": 24,
    "liveness_retry_text_icon_2_size": 24,
    "liveness_retry_text_icon_3_size": 24,
    "liveness_retry_text_icon_4_size": 24,
    
    "location_instruction_icon_1",
    "location_instruction_icon_2",
    
    "geolocation_icon",
    "geolocation_success_icon",
    "geolocation_deny_icon",

    "primary_button_width": nil,           -- sets primary button width, if nil its width is maximum
    "primary_button_height": 50,           -- sets primary button height,

    "skip_liveness_instructions" : false,  -- skips liveness instructions. type -> boolean
    "liveness_type" : 1,                   -- chooses liveness icons display type values 1 or 2.  type -> int
    "button_corner_radius" : nil,          -- sets button corner radious, if it's nil button will be round cornered
    "panel_elevation" : 1,                 -- sets panels elevation. type -> int

    "liveness_info_main_icon" or "liveness_info_main_anim",      -- instruction page  
    "liveness_frame_face_icon" or "liveness_frame_face_anim",    -- frame page
    "instruction_smile_icon" or "instruction_smile_anim"         -- Liveness processing page 
    
    Sets  font sizes
    "title_medium_size": 20,
    "title_small_size":
    "headline_medium_size": 20,
    "headline_small_size"
    "body_medium_size": 11
    "body_small_size"
 
    Sets font
    "title_font":"font-name",
    "body_font": "font-name",
    "headline_font":"font-name",

    "default_country_code": "GE"   -- sets default country for country code picker
]
```

### 4. Setting a custom logo

`setLogo(view: UIView)` This function is used for setting a custom logo in the library. You can pass your own custom view, and display anything on that view (animations, images, etc.). This logo will be displayed when the library is processing something.

***

### String keys and default values <a href="#liveness-retry-string-keys" id="liveness-retry-string-keys"></a>

String keys and their default value for English language:

```ini
 /* ID verification */
 "identomat_select_document" = "Select document";
  
 "identomat_card" = "ID card";
 "identomat_card_front_instructions" = "Scan FRONT SIDE of ID CARD";
 "identomat_card_front_upload" = "Upload FRONT SIDE of ID CARD";
 "identomat_card_rear_instructions" = "Scan BACK SIDE of ID CARD";
 "identomat_card_rear_upload" = "Upload BACK SIDE of ID CARD";
  
 "identomat_driver_license" = "Driver license";
 "identomat_driver_license_front_instructions" = "Scan FRONT SIDE of DRIVER LICENSE";
 "identomat_driver_license_front_upload" = "Upload FRONT SIDE of DRIVER LICENSE";
 "identomat_driver_license_rear_instructions" = "Scan BACK SIDE of DRIVER LICENSE";
 "identomat_driver_license_rear_upload" = "Upload BACK SIDE of DRIVER LICENSE";
  
 "identomat_passport" = "Passport";
 "identomat_passport_instructions" = "Passport photo page";
 "identomat_passport_upload" = "Upload passport photo page";
  
 "identomat_residence_permit" = "Residence permit";
 "identomat_residence_permit_front_instructions" = "Scan FRONT SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_front_upload" = "Upload FRONT SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_rear_instructions" = "Scan BACK SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_rear_upload" = "Upload BACK SIDE of RESIDENCE PERMIT";
  
 "identomat_capture_method_title" = "Choose a method";
 "identomat_take_photo" = "Take a photo";
 "identomat_upload_file" = "Upload a file";
 "identomat_upload_another_file" = "Upload another file";
  
 "identomat_upload_instructions_1" = "Upload a color image of the entire document";
 "identomat_upload_instructions_2" = "JPG or PNG format only";
 "identomat_upload_instructions_3" = "Screenshots are not allowed";
 "identomat_choose_file" = "Choose a file";
  
 "identomat_verifying" = "Verifying...";
 "identomat_uploading" = "Uploading...";
  
 "identomat_scan_retry_title" = "Capture failed";
 "identomat_scan_retry_instruction" = "Please try again in better lighting";
 "identomat_scan_retry_again" = "Try again";
 "identomat_upload_success" = "Successfully uploaded!";
  
 "identomat_no_document_in_image" = "Frame your document";
 "identomat_document_align" = "Frame your document";
 "identomat_document_blurry" = "Document is blurry";
 "identomat_document_face_blurry" = "Face on document is blurry";
 "identomat_document_face_require_brighter" = "Low light";
 "identomat_document_face_too_bright" = "Avoid direct light";
 "identomat_document_move_away" = "Please move document away";
 "identomat_document_move_closer" = "Please move document closer";
 "identomat_document_move_down" = "Please move document down";
 "identomat_document_move_left" = "Please move document to the left";
 "identomat_document_move_right" = "Please move document to the right";
 "identomat_document_move_up" = "Please move document up";
 "identomat_document_covered" = "Document is covered";
 "identomat_document_grayscale" = "Document is grayscale";
 "identomat_document_type_mismatch" = "Wrong document";
 "identomat_document_not_readable" = "Document not readable";
 "identomat_document_face_align" = "Document face align";
 "identomat_document_spoofing_detected2" = "Document spoofing detected";
 "identomat_document_page_mismatch" = "Wrong page";
 "identomat_document_nfc_chip_damaged" = "Document NFC chip damaged";
  
  
 /* Passive liveness */
 "identomat_face_instructions" = "Place your FACE within OVAL";
 "identomat_processing" = "Processing, please wait";
  
  
 /* Active liveness */
 "identomat_record_begin_section_1" = "Take a neutral expression";
 "identomat_record_begin_section_2" = "Smile on this sign";
 "identomat_record_begin_section_3" = "Take a neutral expression again";
 "identomat_record_begin_title" = "Get ready for your video selfie";
 "identomat_record_instructions" = "Place your FACE within OVAL and follow the on-screen instructions";
 "identomat_im_ready" = "I'm ready";
 "identomat_neutral_expression" = "Neutral face";
 "identomat_smile" = "Smile";
  
  
 /* Adaptive liveness */
"identomat_passive_record_begin_title" = "Get ready for your video selfie";
"identomat_passive_record_begin_subtitle" = "Follow the on-screen instructions when prompted.";
"identomat_passive_record_begin_subtitle_smile" = "When prompted, repeat the facial expression shown on the icons.";
"identomat_passive_record_begin_section_title" = "Tips";
"identomat_passive_record_begin_section_1" = "Frame your face";
"identomat_passive_record_begin_section_2" = "Hold still until success notify";
"identomat_smile" = "Smile""identomat_im_ready" = "I'm ready";
  
  
 /* Cascading liveness */
 "identomat_cascading_instructions" = "When prompted, repeat the facial expression shown on the icons: \n\n• Keep neutral face \n• Smile";
 "identomat_cascading_instructions_title" = "When prompted, repeat the facial expression shown on the icons:";
 "identomat_cascading_instructions_1" = "• Keep neutral face";
 "identomat_cascading_instructions_2" = "• Smile";
 "identomat_cascading_button" = "Start Liveness Check";
 "identomat_cascading_neutral_face" = "Keep neutral face";
 "identomat_cascading_start" = "Position your face!";
 "identomat_cascading_smile" = "Smile!";
 "identomat_cascading_fail" = "Liveness Failed";
 "identomat_cascading_success" = "That's it!";
  
 "identomat_liveness_retry_title" = "We can't detect your face";
 "identomat_liveness_retry_instruction" = "But first, please take a look at the instructions";
 "identomat_liveness_retry_again" = "Try again";
 "identomat_liveness_retry_instruction_1" = "Make sure to be in a place with good lighting";
 "identomat_liveness_retry_instruction_2" = "Make sure your eyes are clearly visible";
 "identomat_liveness_retry_instruction_3" = "Make sure to remove masks or other items that cover your face. Eyeglasses are okay";
 "identomat_liveness_retry_instruction_4" = "Make sure to only show your face, we don’t need to see your ID";
  
 "identomat_lets_try" = "Let's try";
  
 "identomat_low_neutral_frequency" = "Untimely smile detected";
 "identomat_not_smile" = "Smile not detected";
 "identomat_eyes_closed" = "Eyes are closed";
 "identomat_face_hold" = "Hold still";
 "identomat_no_face" = "Face is missing";
 "identomat_face_covered" = "Face is covered";
 "identomat_face_align" = "Frame your face";
 "identomat_face_away_from_center" = "Center your Face";
 "identomat_face_blurry" = "Face is blurry";
 "identomat_face_far_away" = "Move closer";
 "identomat_face_require_brighter" = "Low light";
 "identomat_face_too_bright" = "Avoid direct light";
 "identomat_face_too_close" = "Move away";
 "identomat_smile_detected" = "Get neutral face";
 "identomat_multiple_face" = "Keep only your face visible";
  
 /* Camera permission */
 "identomat_camera_deny_title" = "Camera access denied";
 "identomat_camera_deny_settings" = "Allow access";
 "identomat_camera_deny_cancel" = "Cancel process";
  
  
 /* Phone number collection and verification */
 "identomat_resend_code" = "Resend Code";
 "identomat_get_code" = "Get Code";
 "identomat_sms_title" = "Verify Phone Number";
 "identomat_sms_subtitle" = "Enter your correct phone number\nto get verification code";
 "identomat_resend_in" = "Resend code in ";
 "identomat_invalid_number" = "Please enter valid number";
 "identomat_invalid_code" = "The code is not valid";
 "identomat_sms_code_sent" = "Enter the 4-digit verification code sent to ";
 "identomat_enter_sms_code" = "Enter SMS code";
 "identomat_phone_number_hint" = "Phone number";
 "identomat_enter_phone_number" = "Enter phone number";
 "identomat_enter_correct_number" = "Enter your correct phone number";
 "identomat_confirm" = "Confirm";
 "identomat_search" = "Search";
 "identomat_verify_enter_code_hint" = "Enter code";
  
  
 /* Email collection and verification*/
 "identomat_enter_email_address" = "Enter email address";
 "identomat_enter_correct_email" = "Enter your correct email address";
 "identomat_enter_valid_email" = "Please enter valid email";
 "identomat_email_hint" = "Email address";
 "identomat_confirm" = "Confirm";
 "identomat_email_check_title" = "Verify Email";
 "identomat_email_check_subtitle" = "Enter your correct email address\nto get verification code";
 "identomat_get_code" = "Get Code";
 "identomat_resend_in" = "Resend code in ";
 "identomat_resend_code" = "Resend Code";
 "identomat_verify_email_code_title" = "Enter code";
 "identomat_verify_email_code_subtitle" = "Enter the 6-digit verification code sent to ";
 "identomat_verify_email_invalid_code" = "The code is not valid";
 "identomat_verify_enter_code_hint" = "Enter code";
  
  
 /* Page titles */
 "identomat_require_email_header" = "";
 "identomat_require_phone_number_header" = "";
 "identomat_require_phone_number_check_header" = "";
 "identomat_enter_sms_code_header" = "";
 "identomat_select_documents_header" = "";
 "identomat_capture_methods_header" = "";
 "identomat_upload_header" = "";
 "identomat_new_liveness_header" = "";
 "identomat_camera_access_header" = "";
 "identomat_select_country" = "Select country";
 "identomat_retry_header" = "";
  
  
 /* Geolocation */
 "identomat_send_location_button" = "Send Location";
 "identomat_geolocation_title" = "Allow location access";
 "identomat_geolocation_subtitle" = "To continue the verification, we need access to your device's location.";
 "identomat_geolocation_success" = "Your profile has been verified.";
  
 "identomat_geolocation_deny_title" = "Location access denied";
 "identomat_geolocation_deny_subtitle" = "We can’t identify you without your location";
 "identomat_geolocation_deny_instruction_1" = "You can recover location access through your device settings";
 "identomat_geolocation_deny_instruction_2" = "Go to app settings and enable location access for this app";
 "identomat_geolocation_enable_button" = "Enable in settings";
 "identomat_geolocation_cancel_button" = "Cancel process";
  
  
 /* Proof of address */
 "identomat_bank_statement" = "Bank Statement";
 "identomat_utility_bill" = "Utility bill";
 "identomat_vehicle_registration_certificate" = "Vehicle registration certificate";
 "identomat_yellow_slip" = "Yellow slip";
 "identomat_drivers_license" = "Driver's license";
  
 "identomat_upload_bank_statement" = "Upload Bank Statement";
 "identomat_upload_utility_bill" = "Upload Utility bill";
 "identomat_upload_vehicle_registration_certificate" = "Upload Vehicle registration certificate";
 "identomat_upload_yellow_slip" = "Upload Yellow slip";
 "identomat_upload_drivers_license" = "Upload Driver's license";
 "identomat_upload_document_subtitle" = "Make sure that all the information on the photo is visible and easy to read";
  
 "identomat_select_document_title" = "Select Document";
 "identomat_proof_of_address_title" = "Proof of Address";
 "identomat_proof_of_address_subtitle" = "Please upload a document that confirms your residential address.";
 "identomat_uploaded" = "Uploaded";
 "identomat_document_errors" = "Document Errors";
  
 "identomat_expired_date_was_not_found" = "Expiry date was not found in the document";
 "identomat_issued_date_was_not_found" = "Issue date was not found in the document";
 "identomat_full_name_does_not_match" = "Full name does not match";
 "identomat_full_name_was_not_found" = "Full name was not found in the document";
 "identomat_issuing_authority_name_was_not_found" = "Issuing authority name was not found in the document";
 "identomat_street_address_was_not_found" = "Street address was not found in the document";
 "identomat_document_expired" = "Document is expired";
 "identomat_address_not_valid" = "Address not valid";
 "identomat_document_date_is_in_the_future" = "Document date is in the future";
 "identomat_document_not_matched" = "Document not matched";
 "identomat_oversized_file" = "Oversized File: Maximum file size is 5MB";
 "identomat_unsupported_file_type" = "File Format Mismatch";
 "identomat_too_many_pages" = "Too many Pages: Maximum pages is 20";
  
 "identomat_continue" = "Continue";
 "identomat_no_connection" = "No internet connection";
 
```


# iOS SDK changelog

Keep track of changes and upgrades to the Identomat iOS SDK.

{% hint style="info" %}
**Breaking changes are marked in bold.**
{% endhint %}

### Version 1.1.171

*Released on Jul 06, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.165

*Released on Jun 25, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.164

*Released on Jun 24, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.163

*Released on Jun 16, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.162

*Released on May 27, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.161

*Released on May 15, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.160

*Released on May 01, 2026*

* **Added: Document data review page.** \
  Users can now review and edit extracted document data before submission. For implementation details, please refer to our [Developer guide](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification).

### Version 1.1.158

*Released on Mar 25, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.157

*Released on Mar 11, 2026*

* **Added: Ability to include a Email verification step.**

### Version 1.1.156

*Released on Feb 18, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.155

*Released on Feb 17, 2026*

* **Added:** Ability to override specific element colors for enhanced UI customization:
  * `input_active_border_color` – Active state border color for input fields.
  * `input_default_border_color` – Default border color for input fields.
  * `button_secondary_outline_color` – Outline color for secondary buttons.
  * `button_secondary_text_color` – Text color for secondary buttons.

### Version 1.1.154

*Released on Feb 10, 2026*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.153

*Released on Feb 02, 2026*

* **Added**: **NFC reader support**.&#x20;

To enable NFC in the [ID document step](/developer-tools/developer-guide/kyc-know-your-customer#identity-document-verification), the `allow_nfc_capture: true` flag must be provided.&#x20;

### Version 1.1.152

*Released on Dec 05, 2025*

* **Fixed**: Liveness bug affecting iOS 15.

### Version 1.1.151

*Released on Nov 25, 2025*

* **Added**: [New color variables](https://docs.identomat.com/sdks/ios-sdk/pages/sMnYHKpPfQuXczMlnIHB#id-1.-customizing-colors) in design customization.
* **Fixed**: User interface bug in adaptive liveness.

### Version 1.1.149

*Released on Oct 20, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.148

*Released on Oct 13, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.147

*Released on Oct 07, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.145

*Released on Sep 30, 2025*

* **Added: Ability to include a Proof of Address (POA) step.**

### Version 1.1.142

*Released on Sep 23, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.141

*Released on Sep 19, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.140

*Released on Sep 12, 2025*

* **Added: Ability to include a Geolocation step.**

### Version 1.1.139

*Released on Sep 09, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.138

*Released on Aug 26, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.135

*Released on Aug 07, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.133

*Released on July 30, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.131

*Released on July 24, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.130

*Released on Jun 25, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.129

*Released on May 21, 2025*

* **Fixed:** Various bugs and performance improvements.
* **Fixed:** Issue with language display—only keys were visible instead of actual titles.
* **Changed**: Hyperlink color customization—previously tied to the primary color; now controlled by a separate `text_link` parameter.

### Version 1.1.127

*Released on March 29, 2025*

* **Added**: Ability to capture full HD photos.
* **Changed**: Parameters for fonts, font sizes, and colors.
  * **Set font**&#x20;
    * `head1_font` changed to `headline_font`
    * `head2_font` was <mark style="color:red;">removed</mark>.
  * **Set font size**
    * `title_font_size` changed to `title_medium_size`
    * `head1_font_size` changed to `headline_medium_size`
    * `body_font_size` changed to `body_medium_size`
    * `title_small_size` was <mark style="color:green;">added</mark>.&#x20;
    * `headline_small_size` was <mark style="color:green;">added</mark>.&#x20;
    * `body_small_size` was <mark style="color:green;">added</mark>.&#x20;
  * **Set font colors**
    * `text_color_header` changed to `text_primary`
    * `text_color_title` was <mark style="color:red;">removed</mark>.
    * `text_color` was <mark style="color:red;">removed</mark>.
    * `text_secondary` was <mark style="color:green;">added</mark>.&#x20;
    * `text_placeholder` was <mark style="color:green;">added</mark>.&#x20;
    * `text_disabled` was <mark style="color:green;">added</mark>.&#x20;
    * `text_inverse` was <mark style="color:green;">added</mark>.&#x20;
    * `text_link` was <mark style="color:green;">added</mark>.&#x20;

### Version 1.1.126

*Released on March 27, 2025*

* **Fixed**: Icon on the retry page wasn't updating according to the primary color.

### Version 1.1.124

*Released on March 17, 2025*

* **Fixed**: Crash issue on the retry page when setting an icon.

### Version 1.1.121

*Released on March 12, 2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.121

*Released on February 17, 2025*

* **Added**: New variables for UI customization:
  * `back_button_icon` – Changes the back button icon.
  * `primary_button_width` – Adjusts the width of the primary button.
  * `primary_button_height` – Adjusts the height of the primary button.
  * `liveness_smile_icon`– Changes the liveness smile icon. Example: *UIImage(named: "liveness\_smile\_icon")*

### Version 1.1.120

*Released on February 12.2025*

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.119

&#x20;*Released on February 7, 2025*

* **Added**: Country code selection for phone number collection and verification steps.
* **Added**: Ability to customize the back button icon.

### Version 1.1.118

* **Fixed**: Text alignment issues on phone number collection and phone number verification pages.

### Version 1.1.116

* **Fixed**: Text alignment issues on phone number collection and phone number verification pages.

### Version 1.1.115

* **Internal** changes only

### Version 1.1.114

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.113

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.112

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.111

* **Fixed:** Various bugs and performance improvements.

### Version 1.1.110

* **Fixed**: Various bugs on the retry page.

### Version 1.1.109

* **Changed**: UI of the liveness retry page updated for improved user experience.

### Version 1.1.108

* **Added**: Vehicle registration certificate reader in the Proof of Address step.

### Version 1.1.96

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version 1.1.94

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version 1.1.93

* **Fixed**: Issues related to design customization updates for phone number collection and verification steps.

### Version

* **Changed**: Liveness icon and uploading text color are now separately customizable.
* **Fixed**: Loader issue at the end of phone number verification.
* **Fixed**: Agreement translation issue when changing languages.
* **Fixed**: Dark and light mode issues - some colors were changing incorrectly.

### Version 1.1.91

* **Added**: Ability to customize link colors in agreements.

### Version 1.1.90

* **Added**: Ability to translate texts on phone number collection and verification steps.

### Version 1.1.89

* **Added**: Design customization options for phone number collection and verification steps.

### Version 1.1.88

* **Changed:** Passive liveness and cascading functionality combined for improved performance.

### Version 1.1.87

* **Changed**: Flag name for phone number verification.
  * `verify_phone_number changed` to `require_phone _number_check`

### Version 1.1.86

* **Fixed**: Issue with selecting the correct camera on iPhone 14 and later models.

### Version 1.1.85

* **Fixed**: Bugs related to adding links in agreements.

### Version 1.1.84

* **Added**: Ability to include links in agreements.
* **Fixed**: Bugs related to phone number verification functionality.

### Version 1.1.83

* **Added**: Phone number verification functionality.


# React Native SDK

Welcome to the Identomat React Native SDK documentation! Here, you'll find everything you need to integrate our ID verification and KYC/AML solutions into your React Native application seamlessly.

{% hint style="info" %}
Latest release: **Version 1.1.47**
{% endhint %}

## Getting started

```
$ npm install '@identomat-inc/react-native-identomat'
```

### For iOS:

Run `pod-install` in your iOS directory.

### For Android:

Insert the following lines inside the dependencies block in `android/build.gradle`:

```
    allprojects {
        repositories {
            google ()
            jcenter ()
            maven {
                url = uri("https://gitlab.identomat.com/api/v4/projects/674/packages/maven/")
            }
        }
    }
       ...
```

## Usage

```
     import identomat from '@identomat-inc/react-native-identomat';
// Callback for when the process finishes
    class Callback {
        callback() {
        console.log('finished')
        }
    }

// Callback for back button
class Back {
    callback() {
      console.log('back')
    
    }
  }
    identomat.setCallback(new Callback());
    identomat.setBackButtonCallback(new Back());
    identomat.setBaseUrl(config.baseUrl);
    identomat.setColors(config.colors);
    identomat.setStrings(config.strings);
    identomat.start(config.sessionKey);
```

## Config

```
module.exports = {
  sessionKey : '',
  baseUrl : 'https://widget.identomat.com/api/',
  colors: {
    "background",
    "text_primary",
    "text_secondary",
    "text_placeholder",
    "text_disabled",
    "text_inverse",
    "text_link",
    "primary_color",
    "neutral_color",
    "danger_color",
    "success_color",
    "warning_color",
    "black",
    "white"
  },
  variables:{
    "liveness_retry_icon_size": 200,                  
    "scan_retry_icon_size": 200,
    "camera_deny_icon_size": 200,
    "upload_retry_icon_size": 200,
    "liveness_retry_text_icon_1_size": 24,
    "liveness_retry_text_icon_2_size": 24,
    "liveness_retry_text_icon_3_size": 24,
    "liveness_retry_text_icon_4_size": 24

    "title_medium_size": 16,
    "title_small_size": 14,
    "headline_medium_size": 28,
    "headline_small_size": 24, 
    "body_medium_size": 16,
    "body_small_size": 14

    "title_font":"font-name",
    "headline_font":"font-name",
    "body_font":"font-name",
},
  strings:{
    "en":{
      //ID verification
         
      "identomat_select_document": "Select document",
         
      "identomat_card": "ID card",
      "identomat_card_front_instructions": "Scan FRONT SIDE of ID CARD",
      "identomat_card_front_upload": "Upload FRONT SIDE of ID CARD",
      "identomat_card_rear_instructions": "Scan BACK SIDE of ID CARD",
      "identomat_card_rear_upload": "Upload BACK SIDE of ID CARD",
       
      "identomat_driver_license": "Driver license",
      "identomat_driver_license_front_instructions": "Scan FRONT SIDE of DRIVER LICENSE",
      "identomat_driver_license_front_upload": "Upload FRONT SIDE of DRIVER LICENSE",
      "identomat_driver_license_rear_instructions": "Scan BACK SIDE of DRIVER LICENSE",
      "identomat_driver_license_rear_upload": "Upload BACK SIDE of DRIVER LICENSE",
       
      "identomat_passport": "Passport",
      "identomat_passport_instructions": "Passport photo page",
      "identomat_passport_upload": "Upload passport photo page",
       
      "identomat_residence_permit": "Residence permit",
      "identomat_residence_permit_front_instructions": "Scan FRONT SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_front_upload": "Upload FRONT SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_rear_instructions": "Scan BACK SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_rear_upload": "Upload BACK SIDE of RESIDENCE PERMIT",
       
      "identomat_capture_method_title": "Choose a method",
      "identomat_take_photo": "Take a photo",
      "identomat_upload_file": "Upload a file",
      "identomat_upload_another_file": "Upload another file",
       
      "identomat_upload_instructions_1": "Upload a color image of the entire document",
      "identomat_upload_instructions_2": "JPG or PNG format only",
      "identomat_upload_instructions_3": "Screenshots are not allowed",
      "identomat_choose_file": "Choose a file",
       
      "identomat_verifying": "Verifying...",
      "identomat_uploading": "Uploading...",
       
      "identomat_scan_retry_title": "Capture failed",
      "identomat_scan_retry_instruction": "Please try again in better lighting",
      "identomat_scan_retry_again": "Try again",
      "identomat_upload_success": "Successfully uploaded!",
       
      "identomat_no_document_in_image": "Frame your document",
      "identomat_document_align": "Frame your document",
      "identomat_document_blurry": "Document is blurry",
      "identomat_document_face_blurry": "Face on document is blurry",
      "identomat_document_face_require_brighter": "Low light",
      "identomat_document_face_too_bright": "Avoid direct light",
      "identomat_document_move_away": "Please move document away",
      "identomat_document_move_closer": "Please move document closer",
      "identomat_document_move_down": "Please move document down",
      "identomat_document_move_left": "Please move document to the left",
      "identomat_document_move_right": "Please move document to the right",
      "identomat_document_move_up": "Please move document up",
      "identomat_document_covered": "Document is covered",
      "identomat_document_grayscale": "Document is grayscale",
      "identomat_document_type_mismatch": "Wrong document",
      "identomat_document_not_readable": "Document not readable",
      "identomat_document_face_align": "Document face align",
      "identomat_document_spoofing_detected2": "Document spoofing detected",
      "identomat_document_page_mismatch": "Wrong page",
      "identomat_document_nfc_chip_damaged": "Document NFC chip damaged";
       
       
      //Passive liveness
      "identomat_face_instructions": "Place your FACE within OVAL",
      "identomat_processing": "Processing, please wait";
       
       
      // Active liveness
      "identomat_record_begin_section_1": "Take a neutral expression",
      "identomat_record_begin_section_2": "Smile on this sign",
      "identomat_record_begin_section_3": "Take a neutral expression again",
      "identomat_record_begin_title": "Get ready for your video selfie",
      "identomat_record_instructions": "Place your FACE within OVAL and follow the on-screen instructions",
      "identomat_im_ready": "I'm ready",
      "identomat_neutral_expression": "Neutral face",
      "identomat_smile": "Smile",
       
       
      // Adaptive liveness
      "identomat_passive_record_begin_title": "Get ready for your video selfie",
      "identomat_passive_record_begin_subtitle": "Follow the on-screen instructions when prompted.",
      "identomat_passive_record_begin_subtitle_smile": "When prompted, repeat the facial expression shown on the icons."
      "identomat_passive_record_begin_section_title": "Tips",
      "identomat_passive_record_begin_section_1": "Frame your face",
      "identomat_passive_record_begin_section_2": "Hold still until you see a success notification.",
      "identomat_smile": "Smile",
      "identomat_im_ready": "I'm ready";
       
       
      // Cascading liveness
      "identomat_cascading_instructions": "When prompted, repeat the facial expression shown on the icons:\n\n• Keep neutral face\n• Smile",
      "identomat_cascading_instructions_title": "When prompted, repeat the facial expression shown on the icons:",
      "identomat_cascading_instructions_1": "• Keep neutral face",
      "identomat_cascading_instructions_2": "• Smile",
      "identomat_cascading_button": "Start Liveness Check",
      "identomat_cascading_neutral_face": "Keep neutral face",
      "identomat_cascading_start": "Position your face!",
      "identomat_cascading_smile": "Smile!",
      "identomat_cascading_fail": "Liveness Failed",
      "identomat_cascading_success": "That's it!",
       
      "identomat_liveness_retry_title": "We can't detect your face",
      "identomat_liveness_retry_instruction": "But first, please take a look at the instructions",
      "identomat_liveness_retry_again": "Try again",
      "identomat_liveness_retry_instruction_1": "Make sure to be in a place with good lighting",
      "identomat_liveness_retry_instruction_2": "Make sure your eyes are clearly visible",
      "identomat_liveness_retry_instruction_3": "Remove masks or items covering your face. Eyeglasses are okay",
      "identomat_liveness_retry_instruction_4": "Show only your face, we don’t need to see your ID",
       
      "identomat_lets_try": "Let's try",
       
      "identomat_low_neutral_frequency": "Untimely smile detected",
      "identomat_not_smile": "Smile not detected",
      "identomat_eyes_closed": "Eyes are closed",
      "identomat_face_hold": "Hold still",
      "identomat_no_face": "Face is missing",
      "identomat_face_covered": "Face is covered",
      "identomat_face_align": "Frame your face",
      "identomat_face_away_from_center": "Center your Face",
      "identomat_face_blurry": "Face is blurry",
      "identomat_face_far_away": "Move closer",
      "identomat_face_require_brighter": "Low light",
      "identomat_face_too_bright": "Avoid direct light",
      "identomat_face_too_close": "Move away",
      "identomat_smile_detected": "Get neutral face",
      "identomat_multiple_face": "Keep only your face visible",
       
       
      //Camera permission
      "identomat_camera_deny_title": "Camera access denied",
      "identomat_camera_deny_settings": "Allow access",
      "identomat_camera_deny_cancel": "Cancel process",
       
       
      //Phone number collection & verification
      "identomat_resend_code": "Resend Code",
      "identomat_get_code": "Get Code",
      "identomat_sms_title": "Verify Phone Number",
      "identomat_sms_subtitle": "Enter your correct phone number\nto get verification code",
      "identomat_resend_in": "Resend code in ",
      "identomat_invalid_number": "Please enter valid number",
      "identomat_invalid_code": "The code is not valid",
      "identomat_sms_code_sent": "Enter the 4-digit verification code sent to ",
      "identomat_enter_sms_code": "Enter SMS code",
      "identomat_phone_number_hint": "Phone number",
      "identomat_enter_phone_number": "Enter phone number",
      "identomat_enter_correct_number": "Enter your correct phone number",
      "identomat_confirm": "Confirm",
      "identomat_search": "Search",
      "identomat_verify_enter_code_hint": "Enter code",
       
       
      // Email collection & verification
      "identomat_enter_email_address": "Enter email address",
      "identomat_enter_correct_email": "Enter your correct email address",
      "identomat_enter_valid_email": "Please enter valid email",
      "identomat_email_hint": "Email address",
      "identomat_confirm": "Confirm",
      "identomat_email_check_title": "Verify Email",
      "identomat_email_check_subtitle": "Enter your correct email address\nto get verification code",
      "identomat_get_code": "Get Code",
      "identomat_resend_in": "Resend code in ",
      "identomat_resend_code": "Resend Code",
      "identomat_verify_email_code_title": "Enter code",
      "identomat_verify_email_code_subtitle": "Enter the 6-digit verification code sent to ",
      "identomat_verify_email_invalid_code": "The code is not valid",
      "identomat_verify_enter_code_hint": "Enter code",
       
       
      // Page titles
      "identomat_require_email_header": "",
      "identomat_require_phone_number_header": "",
      "identomat_require_phone_number_check_header": "",
      "identomat_enter_sms_code_header": "",
      "identomat_select_documents_header": "",
      "identomat_capture_methods_header": "",
      "identomat_upload_header": "",
      "identomat_new_liveness_header": "",
      "identomat_camera_access_header": "",
      "identomat_select_country": "Select country",
      "identomat_retry_header": "",
       
       
      //Geolocation
      "identomat_send_location_button": "Send Location",
      "identomat_geolocation_title": "Allow location access",
      "identomat_geolocation_subtitle": "To continue the verification, we need access to your device's location.",
      "identomat_geolocation_success": "Your profile has been verified.",
       
      "identomat_geolocation_deny_title": "Location access denied",
      "identomat_geolocation_deny_subtitle": "We can’t identify you without your location",
      "identomat_geolocation_deny_instruction_1": "You can recover location access through your device settings",
      "identomat_geolocation_deny_instruction_2": "Go to app settings and enable location access for this app",
      "identomat_geolocation_enable_button": "Enable in settings",
      "identomat_geolocation_cancel_button": "Cancel process",
       
       
      //Proof of address
      "identomat_bank_statement": "Bank Statement",
      "identomat_utility_bill": "Utility bill",
      "identomat_vehicle_registration_certificate": "Vehicle registration certificate",
      "identomat_yellow_slip": "Yellow slip",
      "identomat_drivers_license": "Driver's license",
       
      "identomat_upload_bank_statement": "Upload Bank Statement",
      "identomat_upload_utility_bill": "Upload Utility bill",
      "identomat_upload_vehicle_registration_certificate": "Upload Vehicle registration certificate",
      "identomat_upload_yellow_slip": "Upload Yellow slip",
      "identomat_upload_drivers_license": "Upload Driver's license",
      "identomat_upload_document_subtitle": "Make sure that all the information on the photo is visible and easy to read",
       
      "identomat_select_document_title": "Select Document",
      "identomat_proof_of_address_title": "Proof of Address",
      "identomat_proof_of_address_subtitle": "Please upload a document that confirms your residential address.",
      "identomat_uploaded": "Uploaded",
      "identomat_document_errors": "Document Errors",
       
      "identomat_expired_date_was_not_found": "Expiry date was not found in the document",
      "identomat_issued_date_was_not_found": "Issue date was not found in the document",
      "identomat_full_name_does_not_match": "Full name does not match",
      "identomat_full_name_was_not_found": "Full name was not found in the document",
      "identomat_issuing_authority_name_was_not_found": "Issuing authority name was not found in the document",
      "identomat_street_address_was_not_found": "Street address was not found in the document",
      "identomat_document_expired": "Document is expired",
      "identomat_address_not_valid": "Address not valid",
      "identomat_document_date_is_in_the_future": "Document date is in the future",
      "identomat_document_not_matched": "Document not matched",
      "identomat_oversized_file": "Oversized File: Maximum file size is 5MB",
      "identomat_unsupported_file_type": "File Format Mismatch",
      "identomat_too_many_pages": "Too many pages: The maximum is 20",
       
      "identomat_continue": "Continue",
      "identomat_no_connection": "No internet connection"
    }
  }
}
```


# React Native SDK changelog

Keep track of changes and upgrades to the React Native SDK.

{% hint style="info" %}
**Breaking changes are marked in bold.**
{% endhint %}

### Version 1.1.47

*Released on Jul 06, 2026*

* **Updated**: iOS version increased to 1.1.171.

### Version 1.1.45

*Released on Jun 24, 2026*

* **Updated**: iOS version increased to 1.1.165.

### Version 1.1.44

*Released on Jun 24, 2026*

* **Updated**: iOS version increased to 1.1.164 and Android version increased to 1.1.185.

### Version 1.1.43

*Released on May 13, 2026*

* **Updated**: iOS version increased to 1.1.161 and Android version increased to 1.1.183.

### Version 1.1.42

*Released on Apr 22, 2026*

* **Updated**: iOS version increased to 1.1.159 and Android version increased to 1.1.181.

### Version 1.1.41

*Released on Mar 25, 2026*

* **Updated**: iOS version increased to 1.1.158 and Android version increased to 1.1.179.

### Version 1.1.40

*Released on Mar 11, 2026*

* **Updated**: iOS version increased to 1.1.157 and Android version increased to 1.1.177.
* **Added: Ability to include Email verification step.**

### Version 1.1.38

*Released on Feb 18, 2026*

* **Updated**: iOS version increased to 1.1.156.

### Version 1.1.37

*Released on Feb 17, 2026*

* **Updated**: iOS version increased to 1.1.155, **Adding** ability to override specific element colors for enhanced UI customization:
  * `input_active_border_color` – Active state border color for input fields.
  * `input_default_border_color` – Default border color for input fields.
  * `button_secondary_outline_color` – Outline color for secondary buttons.
  * `button_secondary_text_color` – Text color for secondary buttons.

### Version 1.1.36

*Released on Feb 13, 2026*

* **Updated**: Android version increased to 1.1.175, **Adding** ability to override specific element colors for enhanced UI customization:
  * `input_active_border_color` – Active state border color for input fields.
  * `input_default_border_color` – Default border color for input fields.
  * `button_secondary_outline_color` – Outline color for secondary buttons.
  * `button_secondary_text_color` – Text color for secondary buttons.

### Version 1.1.34

*Released on Feb 02, 2026*

* **Updated**: iOS version increased to 1.1.153, **adding NFC reader support.** Android version increased to 1.1.172.

### Version 1.1.33

*Released on Jan 29, 2026*

* **Updated**: Android version increased to 1.1.171.

### Version 1.1.32

*Released on Jan 21, 2026*

* **Updated**: Android version increased to 1.1.166, **adding NFC reader support.**

### Version 1.1.30

*Released on Dec 08, 2025*

* **Added**: [New color variables](https://docs.identomat.com/sdks/react-native-sdk/pages/sMnYHKpPfQuXczMlnIHB#id-1.-customizing-colors) in design customization.
* **Updated**: iOS version increased to 1.1.152 and Android version increased to 1.1.163.

### Version 1.1.28

*Released on Sep 19, 2025*

* **Updated**: iOS version increased to 1.1.141.

### Version 1.1.26

*Released on Sep 10, 2025*

* **Updated**: iOS version increased to 1.1.139 and Android version increased to 1.1.155.

### Version 1.1.25

*Released on July 29, 2025*

* **Updated**: iOS version increased to 1.1.132 and Android version increased to 1.1.147.
* **Added: Ability to include a user questionnaire step.**
* **Added: Ability to start sessions using a predefined configuration.**

### Version 1.1.24

*Released on July 24, 2025*

* **Updated**: iOS version increased to 1.1.131 and Android version increased to 1.1.146.

### Version 1.1.23

*Released on Jun 26, 2025*

* **Updated**: iOS version increased to 1.1.130 and Android version increased to 1.1.142.

### Version 1.1.21

*Released on May 23, 2025*

* **Updated**: iOS version increased to 1.1.129 and Android version increased to 1.1.138 due to Kotlin version update (2.1.21).

### Version 1.1.19

*Released on March 27, 2025*

* **Updated**: iOS version increased to 1.1.126 and Android version increased to 1.1.134.

### Version 1.1.18

*Released on March 17, 2025*

* **Updated**: Android version increased to 1.1.133.

### Version 1.1.17

*Released on March 17, 2025*

* **Updated**: iOS version increased to 1.1.124 and Android version increased to 1.1.132.

### Version 1.1.13

*Released on March 12, 2025*

* **Updated**: iOS version increased to 1.1.122 and Android version increased to 1.1.129.

### Version 1.1.13

* **Fixed**: Various bugs and performance improvements.

### Version 1.1.13

* **Added**: Callback for unfinished sessions.
* **Updated**: iOS version increased to 1.1.120 and Android version increased to 1.1.124.

### Version 1.1.12

* **Updated**: iOS version increased to 1.1.119 and Android version increased to 1.1.123.

### Version 1.1.11

* **Updated**: Android version increased to 1.1.122.

### Version 1.1.10

* **Updated**: iOS version increased to 1.1.116.

### Version 1.1.8

* **Updated**: Upgraded to the latest version of React Native.


# Flutter SDK

Welcome to the Identomat Flutter SDK documentation! Here, you'll find everything you need to integrate our ID verification and KYC/AML solutions into your Flutter application seamlessly.

{% hint style="info" %}
Latest release: **Version** **0.0.16**
{% endhint %}

## Overview

The Identomat Flutter SDK provides a Flutter interface for starting an Identomat verification session in a mobile application using a session key.

The SDK is responsible for:

* Initializing the Identomat verification flow
* Launching the verification UI
* Communicating with the native Identomat implementation

## Getting started

### Depend on it

Run this command:

```sh
 $ flutter pub add identomat_flutter
```

This will add a line like this to your package's `pubspec.yaml` (and run an implicit `flutter pub get`):

```
dependencies:
  identomat_flutter: ^0.0.11
```

Alternatively, your editor might support `flutter pub get`. Check the docs for your editor to learn more.

### Import it

In your Dart code, you can use:

```
import 'package:identomat_flutter/identomat.dart';
import 'package:identomat_flutter/identomat_flutter_method_channel.dart';
import 'package:identomat_flutter/identomat_flutter_platform_interface.dart';
```

## Example

**example/lib/main.dart**

```
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:identomat_flutter/identomat.dart';
import 'package:identomat_flutter_example/data.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final identomat = Identomat();
  TextEditingController myController = TextEditingController();
  final formKey = GlobalKey<FormState>();

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState(String sesstionKey) async {
    identomat.setCallback(
      () {
        print('===========>>> ONCALL');
      },
    );
    await identomat.setBaseUrl(data['baseUrl']);
    await identomat.setColors(data['colors']);
    await identomat.setStrings(data['strings']);
    await identomat.start(sesstionKey);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: Form(
              key: formKey,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextFormField(
                    controller: myController,
                    decoration:
                        const InputDecoration(hintText: 'Enter session key'),
                    validator: (text) {
                      if (text == null || text.trim().isEmpty) {
                        return 'Session key is empty';
                      }
                      return null;
                    },
                  ),
                  const SizedBox(
                    height: 20,
                  ),
                  ElevatedButton(
                    onPressed: () {
                      FocusManager.instance.primaryFocus?.unfocus();
                      if (formKey.currentState!.validate()) {
                        initPlatformState(myController.text.trim());
                      }
                    },
                    child: const Text('Click'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
```


# Flutter SDK changelog

Keep track of changes and upgrades to the Flutter SDK.

{% hint style="info" %}
**Breaking changes are marked in bold.**
{% endhint %}

### Version 0.0.16

*Released on Mar 25, 2026*

* **Updated**: iOS version increased to 1.1.158 and Android version increased to 1.1.179.

### Version 0.0.15

*Released on Feb 16, 2026*

* **Updated**: Android version increased to 1.1.175.

### Version 0.0.14

*Released on Feb 13, 2026*

* **Updated**: iOS version increased to 1.1.154 and Android version increased to 1.1.174.

### Version 0.0.13

*Released on Feb 03, 2026*

* **Updated**: iOS version increased to 1.1.153, **adding NFC reader support.**&#x20;
* **Updated**: Android version increased to 1.1.172, **adding NFC reader support**.

### Version 0.0.11

*Released on Dec 23, 2025*

* **Updated**: Android version increased to 1.1.166.

### Version 0.0.10

*Released on Dec 18, 2025*

* **Updated**: iOS version increased to 1.1.152 and Android version increased to 1.1.164.

### Version 0.0.9

*Released on Oct 13, 2025*

* **Updated**: iOS version increased to 1.1.148 and Android version increased to 1.1.160.
* **Added: Ability to include a Geolocation step.**
* **Added: Ability to include a Proof of Address step.**

### Version 0.0.7

*Released on July 30, 2025*

* **Updated**: iOS version increased to 1.1.133 and Android version increased to 1.1.147.
* **Added: Ability to include a user questionnaire step.**
* **Added: Ability to start sessions using a predefined configuration.**

### Version 0.0.6

* **Updated**: To latest Android library 1.1.122

### Version 0.0.5 <a href="#id-005" id="id-005"></a>

* **Updated:** To latest iOS library 1.1.114, removing WebRTC dependency.

### Version 0.0.4 <a href="#id-005" id="id-005"></a>

* **Added:** Proof of Address functionally support.

### Version 0.0.3 <a href="#id-005" id="id-005"></a>

* **Fixed**: Basic tests.

### Version 0.0.2 <a href="#id-005" id="id-005"></a>

* **Added**: API and package documentation.
* **Added**: Example.
* **Added**: Supported license.

### Version 0.0.1 <a href="#id-005" id="id-005"></a>

* **Updated**: Mapped most of the important API methods.


# Overview

Live single participant and multi-participant video call solution with built-in eKYC modules.

## Overview

[Video KYC](https://www.identomat.com/products/video-kyc) allows identity verification through live, operator-assisted video calls. It ensures compliance with KYC regulations while providing a fast, remote onboarding experience.

Identomat supports both [one-on-one](#one-on-one-call) and [multi-participant](#multi-user-call) video KYC sessions, each adaptable to your workflow and regulatory needs.

#### One-on-one call

A one-on-one Video KYC session connects a customer directly with a verification operator.\
During the call, the operator performs verification actions in real time — such as:

* Document verification
* Liveness checks
* Data review and questionnaires

Once the verification is complete, the operator can approve or reject the session according to predefined rules.

#### Multi-user call

Multi-user sessions allow multiple participants to be verified within the same video KYC session.\
Each participant follows an independent, configurable workflow.\
This setup is commonly used for business or legal processes that involve several parties, such as:

* Corporate onboarding
* Mortgage or joint account applications
* Title or property registration

***

#### Video KYC may include these steps:

* Identity document verification
* Liveness detection
* AML (Anti-Money Laundering) and adverse media checks
* Proof of Address
* SMS and email verifications
* User and operator questionnaires

These features collectively ensure robust and comprehensive identity verification during the video KYC process.

***

#### Key Features

* **Configurable workflows** — Define the exact verification path per use case.
* **Multi-user support** — Verify multiple individuals in a single session.
* **Real-time operator actions** — Operators can trigger verification steps live during the call.
* **Audit and compliance** — Every call and verification event is logged for audit purposes.
* **Scalable architecture** — Built to handle large volumes of concurrent sessions securely.

***

#### Key benefits:

* **Enhanced security**: Video KYC offers a secure platform for verifying customers' identities, reducing the risk of identity theft and fraudulent activities.
* **Cost-effective**: It reduces operational costs associated with traditional in-person KYC processes, such as travel expenses and infrastructure costs.
* **Convenience**: Customers can undergo the KYC process remotely from anywhere with an internet connection, eliminating the need to visit physical locations.
* **Compliance**: Video KYC helps businesses comply with regulatory requirements by ensuring thorough identity verification processes.
* **Scalability**: Video KYC can easily scale to accommodate a large number of customers, making it suitable for businesses of all sizes.
* **Improved customer experience**: By offering a convenient and efficient verification process, video KYC enhances the overall customer experience, leading to higher satisfaction and retention rates.
* **Flexibility**: Video KYC can be integrated into existing systems and workflows, providing flexibility for businesses to customize the process according to their specific requirements.
* **Reduced manual errors**: Automation features within video KYC help minimize manual errors, ensuring accurate and reliable results.
* **Audit trails**: Video KYC platforms often provide audit trails and detailed records of the verification process, offering transparency and accountability for regulatory purposes.


# Create video KYC session

This guide walks you through creating and sharing a Video KYC session in Identomat Manage — from signing in to sending the verification link to your end user.

## Before you begin

Make sure you have the following in place:

* **An Identomat Manage account.** If you don't have one yet, contact your administrator or reach out to the Identomat team.
* **A Video KYC configuration.** Configurations define the verification steps your end user will go through. Your administrator sets these up. If none is available yet, request one before proceeding.

***

### Sign in to Manage

1. Go to Identomat [Manage](https://manage.identomat.com/).
2. Enter your **email** and **password**.
3. Click **Sign in** to access your account.

### Create a new session

Once you're signed in and a configuration is available:

1. Navigate to the **Sessions** page from the left sidebar.
2. Click **+ New session** in the top-right corner.
3. In the dialog that appears, fill in the following:
   * **Configuration** *(required)* – Select the Video KYC workflow you want to use.
   * **Session Name** *(optional)* – Add an internal label to help you identify this session later.
4. Click **Generate link**.

### Share the session link

After the link is generated, you have a few options for getting it to your end user:

* **Copy and share manually** — Copy the URL and send it via your preferred channel.
* **Send via SMS or email** — Identomat can trigger delivery through your own messaging service. To enable this, configure callback URLs in your **Company settings**. Once set up, you'll receive callbacks for link delivery and user actions. See [Callbacks](/developer-tools/callbacks) for setup instructions.

A few things to keep in mind:

* The link remains accessible from the session detail view if you need to retrieve it later.
* Link expiry is controlled by your workflow configuration. Check with your administrator if you're unsure how long a link stays active.


# End-user side

This page explains what end users will experience during a Video KYC session — from opening the link to completing verification.

## Requirements

Before starting, users should have the following ready:

<table data-header-hidden><thead><tr><th width="176.46484375"></th><th></th></tr></thead><tbody><tr><td>💻 <strong>Device</strong></td><td>A device with a working camera and microphone</td></tr><tr><td>🪪 <strong>Document</strong></td><td>A valid identity document — Passport, Identity Card, Residence Permit, or Driver's License</td></tr><tr><td>🌞 <strong>Lighting</strong></td><td>A well-lit environment</td></tr><tr><td>🛜 <strong>Connection</strong></td><td>A stable internet connection</td></tr></tbody></table>

## One-on-one session

### Joining the call

When the user opens their Video KYC link:

1. Identomat's verification widget launches automatically in their default browser.
2. Depending on the configuration, the user may need to complete preliminary steps — such as reviewing and agreeing to terms — before proceeding.
3. Once ready, the **video call frame** appears with a bottom panel containing:

<table><thead><tr><th width="157.7265625">Control</th><th width="452.93359375">Function</th></tr></thead><tbody><tr><td><strong>Audio</strong></td><td>Mute / unmute microphone</td></tr><tr><td><strong>Video</strong></td><td>Turn camera on / off</td></tr><tr><td><strong>Flip</strong></td><td>Mirror the camera view</td></tr><tr><td><strong>Switch</strong></td><td>Toggle between front and back camera <em>(if available)</em></td></tr><tr><td><strong>Join</strong></td><td>Connect to the operator and start the call</td></tr></tbody></table>

4. The user clicks **Join** to initiate the call. A **Connecting** screen is shown until the operator answers.

Once connected, a top panel becomes visible with:

* **Call duration** — displayed in the top-left corner
* **Device settings** — adjust camera, microphone, and speaker mid-call
* **Full screen** — toggle the video frame size

The operator's video appears in the corner of the frame, outlined in yellow to indicate an active connection.

### During the call

The operator conducts the verification interview in real time. Depending on the configured workflow, the user may be asked to:

* Present their identity document
* Complete a liveness check
* Answer additional verification questions

All steps take place within the video call frame — no separate screens or redirects.

### Ending the call

Once verification is complete, the operator will typically share the result. Either party can end the call:

1. Click **End**.
2. Confirm in the dialog that appears.

### Multi-user session

Multi-user sessions follow the same flow as one-on-one sessions, with two key differences:

* **Participants can see and hear each other**, in addition to interacting with the operator.
* **Each participant completes their own verification workflow simultaneously** — steps are independent, even within the shared call.


# Operator side

What happens after operator receives the call

## Requirements

To conduct Video KYC sessions, operators must have:

<table data-header-hidden><thead><tr><th width="151.78515625"></th><th width="410.5390625"></th></tr></thead><tbody><tr><td>💻 <strong>Device</strong></td><td>A device with a working camera and microphone</td></tr><tr><td>🌞 <strong>Lighting</strong></td><td>A well-lit environment</td></tr><tr><td>🛜 <strong>Connection</strong></td><td>A stable internet connection</td></tr></tbody></table>

### Receiveing the call

Operators create or schedule sessions through the Manage interface. Once a session is set up, it can be coordinated with the applicant for a specific time or left open for them to join when ready.

When the applicant opens their link and clicks **Join**, the operator receives the incoming call and answers to begin the Video KYC process.

## One-on-one session

### **Video call frame**

Once connected, the operator sees a video call frame displaying both parties. The frame has two control panels.

**Top panel**

<table><thead><tr><th width="200.8671875">Control</th><th width="428.1953125">Function</th></tr></thead><tbody><tr><td><strong>Call duration</strong></td><td>Shows elapsed call time</td></tr><tr><td><strong>Virtual backgrounds</strong></td><td>Apply or adjust a custom background during the call</td></tr><tr><td><strong>Device settings</strong></td><td>Adjust camera, microphone, and speaker</td></tr><tr><td><strong>Full screen</strong></td><td>Expand or minimize the video call frame</td></tr></tbody></table>

> Virtual backgrounds are configured by the company administrator in **Company settings**.

**Bottom panel**

<table><thead><tr><th width="127.8125">Control</th><th>Function</th></tr></thead><tbody><tr><td><strong>Audio</strong></td><td>Mute / unmute microphone</td></tr><tr><td><strong>Video</strong></td><td>Turn camera on / off</td></tr><tr><td><strong>Capture</strong></td><td>Take a live screenshot of the applicant — saved automatically to the session</td></tr><tr><td><strong>Steps</strong></td><td>Select which verification steps the applicant should complete</td></tr><tr><td><strong>Start</strong></td><td>Initiate the selected step on the applicant's screen</td></tr></tbody></table>

Operators can repeat steps as needed. Steps can also be re-initiated if a result needs to be retaken.

### **Completing the session**

Once all steps are finished:

1. Review the applicant's information and verification results.
2. Make a decision to **Approve** or **Reject** the session.

> Decisions should follow your company's verification protocols. The system provides recommendations based on completed checks — including document scans, liveness detection, and any additional steps in the workflow.

***

### Multi-user session

Multi-user sessions follow the same flow as one-on-one sessions, with the following additions:

* Up to **10 participants** can join a single session, depending on your business process configuration.
* The operator sees all participants simultaneously in the video call frame.
* Verification steps can be initiated **per participant individually** — each participant completes their own workflow within the shared call.
* At the end, the operator approves or rejects the consolidated **parent session**, following company protocol.


# Панель керування

Ваш центральний хаб для оновлень, швидких посилань та ключових ресурсів — отримуйте доступ до нових функцій, інтеграцій та документації в одному місці.

### Нотатки про випуск

{% hint style="info" %}
17.08.2026

<i class="fa-file-brackets-curly" style="color:$primary;">:file-brackets-curly:</i> **Крок зчитування AnyDoc тепер доступний – серпень 2026**

Представляємо **AnyDoc** — новий крок, який дозволяє витягувати структуровані дані з документів будь-якого типу за допомогою ШІ: розрахункові листки, банківські виписки, рахунки за комунальні послуги, податкові декларації та інше. Визначте потрібні поля для витягування, налаштуйте правила перевірки та пороги достовірності — система автоматично зчитує та перевіряє дані. Доступно як у **безкодовому конструкторі робочих процесів**, так і через **API**.

<p align="right"><a href="/pages/k5L63NyPHDtlvo7uqhtA#anydoc-reader" class="button secondary small" data-icon="rectangle-terminal">Посібник для розробників</a> <a href="/pages/wnS2kgQxwY0UfEr5PVAH#anydoc-reader" class="button primary small" data-icon="arrow-up-right-from-square">Створити без коду</a></p>
{% endhint %}

{% hint style="info" %}
11.08.2026

<i class="fa-users" style="color:$primary;">:users:</i> **Керування групами тепер доступне в Manage – серпень 2026**

**Групи**, якими раніше можна було керувати лише через **API**, тепер можна **створювати, редагувати та видаляти безпосередньо в бекофісі Manage**. Призначайте та оновлюйте членство в групах без написання коду — ідеально для щоденного керування операторами та маршрутизацією.

<p align="right"><a href="/pages/lKEQbtIuRBKjodCxzrhN#list-groups-spisok-grup" class="button secondary small" data-icon="rectangle-terminal">Довідник API</a> <a href="https://manage.identomat.com/groups" class="button primary small" data-icon="arrow-up-right-from-square">Перейти до Manage</a></p>
{% endhint %}

{% hint style="info" %}
14.01.2026

<i class="fa-nfc" style="color:$primary;">:nfc:</i> **До SDK додано підтримку NFC – січень 2026**

Ми **додали підтримку зчитування NFC до наших SDK**, що дозволяє проводити безпечну верифікацію на основі чипа для підтримуваних документів, посвідчення особи, наприклад біометричних паспортів та ID-карток.\
Завдяки цьому оновленню ви можете зчитувати дані безпосередньо з NFC-чипа документа для підвищення точності даних. Захоплення через NFC можна увімкнути через конфігурацію, і воно підтримується на сумісних пристроях.

<p align="right"><a href="/pages/k5L63NyPHDtlvo7uqhtA" class="button secondary small" data-icon="square-code">Посібник для розробників</a></p>
{% endhint %}

{% hint style="info" %}
25.08.2025

<i class="fa-building-columns" style="color:$primary;">:building-columns:</i> **KYB тепер доступний - серпень 2025**

Ми впровадили верифікацію **Know Your Business (KYB)**, яка допоможе вам залучати юридичних осіб та організації з такою ж гнучкістю, як і KYC. Тепер ви можете створювати сесії KYB безпосередньо через **API** або легко налаштовувати їх у **безкодовому конструкторі робочих процесів**. Це значно спрощує інтеграцію верифікації бізнесу у ваші процеси.

<p align="right"><a href="/pages/eT1AZU0kemJavSVI37fS" class="button secondary small" data-icon="square-code">Посібник для розробників</a> <a href="/pages/ktsrbbMaMdjrpgcD0Z5w" class="button secondary small" data-icon="arrow-progress">Створити без коду</a></p>
{% endhint %}

### **Швидкий доступ**

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>Огляд продукту</strong></mark></td><td>Дізнайтеся, що пропонує Identomat, про основні функції та як це допомагає оптимізувати процес верифікації особи.</td><td><a href="/pages/PiaUbZlVB7zNFJK0yDuz">/pages/PiaUbZlVB7zNFJK0yDuz</a></td></tr><tr><td><mark style="color:$primary;"><strong>Початок роботи</strong></mark></td><td>Покрокова інструкція з налаштування облікового запису, конфігурації ролей та запуску вашого першого потоку верифікації.</td><td><a href="/pages/40AyfbhUB8HyOfarMloy">/pages/40AyfbhUB8HyOfarMloy</a></td></tr><tr><td><mark style="color:$primary;"><strong>Безкодовий конструктор робочих процесів</strong></mark></td><td>Легко проєктуйте та налаштовуйте потоки верифікації без написання коду, використовуючи конфігурації типу drag-and-drop.</td><td><a href="/pages/N4BzMEIvD7Rm97iYWwIq">/pages/N4BzMEIvD7Rm97iYWwIq</a></td></tr><tr><td><mark style="color:$primary;"><strong>Відео-KYC</strong></mark></td><td>Дізнайтеся, як працює верифікація через живе відео для операторів та кінцевих користувачів, включно з механізмами контролю відповідності.</td><td><a href="/pages/E1REAIPXyXgxs2CgYQzd">/pages/E1REAIPXyXgxs2CgYQzd</a></td></tr><tr><td><mark style="color:$primary;"><strong>Інтеграція</strong></mark></td><td>Дослідіть різні способи інтеграції Identomat у ваші системи — через iframe, редирект або бекофіс.</td><td><a href="/pages/8MIF4gBWpnF3x0xOD8Pw">/pages/8MIF4gBWpnF3x0xOD8Pw</a></td></tr><tr><td><mark style="color:$primary;"><strong>Довідник API</strong></mark></td><td>Повний технічний довідник щодо REST API Identomat з прикладами запитів та відповідей.</td><td><a href="/pages/lKEQbtIuRBKjodCxzrhN">/pages/lKEQbtIuRBKjodCxzrhN</a></td></tr><tr><td><mark style="color:$primary;"><strong>SDK</strong></mark></td><td>Мобільні та веб-SDK (iOS, Android, Flutter, React Native) з інструкціями з налаштування та журналами змін.</td><td><a href="/pages/ygvCp5lRMWeAkn26pwAt">/pages/ygvCp5lRMWeAkn26pwAt</a></td></tr></tbody></table>


# Вступ

Ласкаво просимо до документації Identomat!

***

Identomat — це платформа верифікації особи та KYC/AML для широкого спектра бізнес-потреб, що максимізує рівень успішного проходження перевірки без шкоди для точності, безпеки чи відповідності вимогам. Незалежно від того, чи прагнете ви запобігти шахрайству, дотриматися регуляторних вимог, чи покращити процес залучення клієнтів, наша платформа пропонує інструменти та гнучкість для задоволення ваших потреб.

#### Огляд <a href="#overview" id="overview"></a>

Identomat розроблено для спрощення процесу верифікації особи за допомогою поєднання передових технологій та зручного інтерфейсу. Наша платформа підтримує широкий спектр методів верифікації, зокрема:​​

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>Верифікація документів, що посвідчують особу</strong></mark></td><td>Автоматично перевіряйте державні посвідчення особи, паспорти та інші документи. Identomat забезпечує справді глобальне покриття, розпізнаючи тисячі типів документів зі 165+ країн.</td><td></td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#identity-document-verification-verifikaciya-dokumenta-sho-posvidchuye-osobu">/pages/k5L63NyPHDtlvo7uqhtA#identity-document-verification-verifikaciya-dokumenta-sho-posvidchuye-osobu</a></td></tr><tr><td><mark style="color:$primary;"><strong>Перевірка живості (Liveness)</strong></mark></td><td>Підтвердіть справжню присутність власника документа за допомогою перевірки живості з використанням відео-селфі з підказками (активна) або без них (пасивна).</td><td></td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#liveness-check-perevirka-zhivosti">/pages/k5L63NyPHDtlvo7uqhtA#liveness-check-perevirka-zhivosti</a></td></tr><tr><td><mark style="color:$primary;"><strong>AML-моніторинг</strong></mark></td><td>Перевірка та постійний моніторинг клієнтів за тисячами списків спостереження, санкційних списків, списків PEP (публічних осіб) та списків негативних медіа.</td><td></td><td><a href="/pages/lKEQbtIuRBKjodCxzrhN#aml-skrining">/pages/lKEQbtIuRBKjodCxzrhN#aml-skrining</a></td></tr><tr><td><mark style="color:$primary;"><strong>Верифікація адреси</strong></mark></td><td>Автоматизоване OCR-розпізнавання та перевірка адреси для документів, що підтверджують адресу, як-от банківські виписки, рахунки за комунальні послуги тощо, у поєднанні з сигналами геолокації через IP та GPS.</td><td></td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#proof-of-address-pidtverdzhennya-adresi">/pages/k5L63NyPHDtlvo7uqhtA#proof-of-address-pidtverdzhennya-adresi</a></td></tr><tr><td><mark style="color:$primary;"><strong>Відео-KYC</strong></mark></td><td>Верифікація через живий відеодзвінок з одним або кількома учасниками, із вбудованою функціональністю повного eKYC на основі ШІ для робочих процесів Human-in-the-Loop.</td><td></td><td><a href="/pages/E1REAIPXyXgxs2CgYQzd">/pages/E1REAIPXyXgxs2CgYQzd</a></td></tr><tr><td><mark style="color:$primary;"><strong>Опитувальники KYC</strong></mark></td><td>Настроюване рішення для збору необхідної інформації для належної перевірки клієнтів (Customer Due Diligence) із конструктором форм та логікою на основі відповідей.</td><td></td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#user-questionnaire-opituvalnik-koristuvacha">/pages/k5L63NyPHDtlvo7uqhtA#user-questionnaire-opituvalnik-koristuvacha</a></td></tr><tr><td><mark style="color:$primary;"><strong>Верифікація телефону та електронної пошти</strong></mark></td><td>Підтвердьте адресу електронної пошти та номер телефону потенційного клієнта за допомогою OTP, збагачуючи його профіль та додаючи рівень безпеки облікового запису.</td><td></td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#phone-number-nomer-telefonu">/pages/k5L63NyPHDtlvo7uqhtA#phone-number-nomer-telefonu</a></td></tr><tr><td><mark style="color:$primary;"><strong>Безкодовий конструктор конфігурацій</strong></mark></td><td>Легко налаштовуйте та розгортайте робочі процеси KYC — від захоплення та верифікації документів до підтвердження адреси, AML-перевірки, участі людини-оператора та іншого.</td><td></td><td><a href="/pages/N4BzMEIvD7Rm97iYWwIq">/pages/N4BzMEIvD7Rm97iYWwIq</a></td></tr><tr><td><mark style="color:$primary;"><strong>Простота інтеграції та налаштування</strong></mark></td><td>Наша передова платформа верифікації особи пропонує настроювані робочі процеси, персоналізований UI/UX та модульну архітектуру з можливістю повного білого лейблу рішення.</td><td></td><td></td></tr></tbody></table>

Завдяки нашому потужному API та SDK ви можете легко інтегрувати наші сервіси верифікації особи у ваші наявні системи та робочі процеси. Ми також пропонуємо широкі можливості налаштування, щоб адаптувати процес верифікації до ваших конкретних бізнес-вимог.

#### **Ключові функції Identomat** <a href="#key-features-of-identomat" id="key-features-of-identomat"></a>

Модульна платформа Identomat включає:

* Комплексний набір функцій KYC/AML
* Перевірку живості, сертифіковану за стандартом iBeta Level 2
* Швидкий час верифікації
* Глобальне покриття документів
* Високий рівень конверсії
* Надійні варіанти розгортання
* Рішення з білим лейблом

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>100 x</strong></mark></td><td>у 100 разів швидша активація облікового запису порівняно з ручною верифікацією</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>40 сек</strong></mark></td><td>Середній час верифікації</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>60%</strong></mark></td><td>Менше відмов клієнтів</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>165+</strong></mark></td><td>Країн та територій</td><td></td><td></td></tr><tr><td><mark style="color:$primary;"><strong>98%</strong></mark></td><td>Рівень конверсії</td><td></td><td></td></tr></tbody></table>


# Початок роботи

Створіть обліковий запис і дізнайтеся, як використовувати та інтегрувати Identomat.

#### Почніть використовувати Identomat

Щоб почати роботу з Identomat, створіть обліковий запис на [manage.identomat.com.](https://manage.identomat.com/) Якщо у вас уже є обліковий запис, можете переходити до інтеграції.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:$primary;"><strong>Налаштування облікового запису</strong></mark></td><td>Детальний посібник з налаштування вашого облікового запису Identomat.</td><td></td><td><a href="/pages/UjOgPAjIghbuCPH3lpx6">/pages/UjOgPAjIghbuCPH3lpx6</a></td></tr><tr><td><mark style="color:$primary;"><strong>Огляд інтеграції</strong></mark></td><td>Дізнайтеся, як інтегрувати Identomat з вашою системою.</td><td></td><td><a href="/pages/MFH3l4dCutk9QYSUTWI9">/pages/MFH3l4dCutk9QYSUTWI9</a></td></tr></tbody></table>


# Налаштування облікового запису

Створіть особистий обліковий запис, щоб почати роботу з Identomat.

#### Про ваш особистий обліковий запис

Особисті облікові записи для Identomat створюються на [manage.identomat.com.](https://manage.identomat.com/) Через платформу керування ви можете отримати доступ до панелі керування, переглядати детальну інформацію про сесії KYC (Know Your Customer) та KYB (Know Your Business), переглядати заявників, створювати власні робочі процеси та отримувати ваш ключ доступу. Щоб отримати повний доступ до всіх функцій платформи Manage, ваш обліковий запис має бути верифікований нашою командою.

#### Запит облікового запису

Якщо у вас ще немає облікового запису Identomat, будь ласка, [зв'яжіться з нашою командою](https://www.identomat.com/contact-us), щоб запросити доступ. Наша команда проведе вас через процес адаптації та надасть облікові дані для платформи Manage.

#### Вхід

1. Перейдіть на [manage.identomat.com](https://manage.identomat.com/)
2. Введіть вашу електронну адресу та пароль, і натисніть **Увійти**.

> 💡 Якщо ваш обліковий запис потребує активації, а ви очікуєте вже більше одного дня, будь ласка, [зв'яжіться з нами](https://www.identomat.com/contact-us).


# Огляд ролей користувачів

Дізнайтеся про різні ролі користувачів у системі Identomat — Адміністратор, Оператор, Оператор кол-центру та Кінцевий користувач — та їхні рівні доступу й функції для підтримки різних робочих процесів

#### Ролі на платформі Manage

Identomat пропонує три типи ролей користувачів на платформі Manage для задоволення різних варіантів використання та робочих процесів: **Адміністратор**, **Оператор** та **Оператор кол-центру**. За потреби користувачі можуть одночасно мати кілька ролей відповідно до своїх конкретних обов'язків.

* **Адміністратор**: Найвищий рівень доступу на платформі Manage. Адміністратори мають повний доступ до всіх функцій панелі керування, можуть створювати конфігурації, керувати користувачами, видаляти сесії та налаштовувати параметри компанії. Якщо компанія зареєстрована як Реселер, адміністратори також можуть створювати облікові записи субкомпаній та керувати ними.
* **Оператор**: Роль оператора призначена для агентів та представників компанії, відповідальних за виконання щоденних операційних завдань. Це включає перегляд та керування сесіями, проведення відеодзвінків для живої верифікації та нагляд за рутинними процесами верифікації.
* **Оператор кол-центру**: Спеціалізована підроль оператора, зосереджена на проведенні ручної верифікації під час живих відеодзвінків. Оператори кол-центру можуть переглядати лише ті сесії, які призначені їм. **Порівняльна таблиця ролей:**

<table><thead><tr><th width="209">Роль</th><th width="196">Права доступу</th><th>Особливі можливості</th></tr></thead><tbody><tr><td><strong>Адміністратор</strong></td><td>Повний доступ</td><td>Керування користувачами, налаштуваннями, конфігураціями, інтеграцією</td></tr><tr><td><strong>Оператор</strong></td><td>Помірний доступ</td><td>Керування панеллю керування, сесіями верифікації</td></tr><tr><td><strong>Оператор кол-центру</strong></td><td>Обмежений доступ</td><td>Отримання дзвінків від користувачів, керування власними сесіями</td></tr></tbody></table>

**Кінцевий користувач**

* **Кінцевий користувач**: Кінцеві користувачі не є обліковими записами платформи Manage. Цей термін стосується осіб, які проходять процес верифікації — вони взаємодіють лише з віджетом верифікації, а не з платформою Manage.


# Приймання дзвінків

Оператори кол-центру можуть приймати дзвінки від кінцевих користувачів та проводити процес відеоверифікації.

У системі Identomat лише користувачі з роллю **Оператор кол-центру** відповідають за приймання дзвінків. Коли ця роль увімкнена, у верхній частині сторінки з'являється перемикач дзвінків. Активація цього перемикача дозволяє системі приймати дзвінки від кінцевих користувачів.&#x20;

Коли кінцевий користувач ініціює дзвінок, з'являється анімація вхідного дзвінка, а оператор кол-центру чує звук дзвінка. Після відповіді оператор з'єднується з кінцевим користувачем і може розпочати кроки верифікації, налаштовані для цієї сесії.&#x20;

Якщо жоден оператор кол-центру не має активного перемикача, вхідні дзвінки не прийматимуться. Переконайтеся, що принаймні один оператор доступний, перш ніж кінцеві користувачі почнуть сесії з кроком відеодзвінка.&#x20;

**Оператори кол-центру** можуть:

* Робити знімки екрана кінцевого користувача в реальному часі.
* Заповнювати опитувальники оператора під час сесії.
* Ініціювати кроки KYC для кінцевого користувача.&#x20;

Детальніше див.:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Відео-KYC</strong></mark></td><td>Дізнайтеся, як працює верифікація через живе відео, включно з повним потоком дій оператора та кінцевого користувача, елементами керування дзвінком та функціями відповідності вимогам.</td><td></td><td><a href="/pages/E1REAIPXyXgxs2CgYQzd">/pages/E1REAIPXyXgxs2CgYQzd</a></td></tr></tbody></table>


# Огляд інтеграції

Незалежно від того, чи шукаєте ви легке фронтенд-рішення, чи більш комплексну серверну інтеграцію, ми маємо все необхідне.

#### Доступні варіанти інтеграції

Identomat можна інтегрувати у ваші системи кількома способами, залежно від ваших технічних вимог та варіанту використання. Оберіть варіант, який найкраще підходить для вашої конфігурації:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Безкодова інтеграція</strong></mark></td><td>Налаштуйте свій потік верифікації та надсилайте посилання на верифікацію кінцевим користувачам безпосередньо з платформи Manage — без потреби в розробці.</td><td></td><td><a href="/pages/qggw3kB0kT4Fib0Q35rp">/pages/qggw3kB0kT4Fib0Q35rp</a></td></tr><tr><td><mark style="color:blue;"><strong>SDK Identomat</strong></mark></td><td>Нативні SDK для iOS, Android, Flutter та React Native. Охоплюють налаштування, конфігурацію та ключові функції для безперешкодної верифікації особи всередині застосунку.</td><td></td><td><a href="/pages/ygvCp5lRMWeAkn26pwAt">/pages/ygvCp5lRMWeAkn26pwAt</a></td></tr><tr><td><mark style="color:blue;"><strong>API Identomat</strong></mark></td><td>REST API для повного контролю над створенням сесій, конфігурацією та отриманням результатів. Ідеально підходить для індивідуальних інтеграцій та серверних робочих процесів.</td><td></td><td><a href="/pages/lKEQbtIuRBKjodCxzrhN">/pages/lKEQbtIuRBKjodCxzrhN</a></td></tr></tbody></table>

Не впевнені, що обрати? Почніть з **безкодової інтеграції**, якщо хочете швидко розпочати роботу. Оберіть **API** або **SDK**, якщо вам потрібно вбудувати верифікацію безпосередньо у ваш продукт.


# Доступ до API

Щоб почати інтеграцію з Identomat, вам знадобляться ключі API для автентифікації запитів

#### Отримання ключів API

* **Перейдіть до розділу ключів API**: Увійдіть у панель керування Identomat та оберіть **API keys** у меню, вкладеному в розділ **Settings**.
* **Створіть ключ**: У розділі API натисніть кнопку **Generate key**.
* **Білий список IP-адрес (необов'язково):** Ви можете обмежити ключ конкретним набором IP-адрес, щоб приймалися лише запити з цих IP — запити з будь-якої іншої IP-адреси будуть відхилені. Якщо жодних IP-адрес не додано, ключ прийматиме запити з будь-якої IP-адреси. IP-адреси в білому списку не фіксуються під час створення — ви можете додавати або видаляти їх у будь-який час у налаштуваннях ключа.
* :exclamation: **Зберігайте безпечно**: Скопіюйте створений ключ API та надійно збережіть його. З міркувань безпеки ключ буде показано лише один раз. Якщо ви його втратите, доведеться створити новий.

> 💡 **HMAC-авторизація**: Для підвищення безпеки ви можете реалізувати HMAC-авторизацію, використовуючи ваш секретний ключ як ключ шифрування. Це необов'язково, але рекомендовано для продакшн-середовищ.

#### Процедура

Процедура інтеграції складається з таких кроків:

1. **Отримання `session_token`.**
2. **Перенаправлення браузера користувача на widget.identomat.com.**
3. **Перевірка результату.** Щоб отримати `session_token`, сервер компанії має викликати ендпоінт **/begin** та надати такі аргументи: `company_key`, `flags` та `steps`. Масив steps містить конфігурацію окремих кроків процесу ідентифікації, кожен з яких може мати власний набір прапорців (flags), специфічних для цього кроку. **Ендпоінт, що використовується для створення session\_token:**

```
https://widget.identomat.com/begin/
```

Детальніше див.:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Посібник для розробників</strong></mark></td><td>Покрокові інструкції та найкращі практики для інтеграції та налаштування наших рішень з верифікації особи.</td><td></td><td><a href="/pages/8MIF4gBWpnF3x0xOD8Pw">/pages/8MIF4gBWpnF3x0xOD8Pw</a></td></tr><tr><td><mark style="color:blue;"><strong>Довідник API</strong></mark></td><td>Вичерпні відомості про ендпоінти, параметри та формати відповідей для безперешкодної інтеграції API.</td><td></td><td><a href="/pages/lKEQbtIuRBKjodCxzrhN">/pages/lKEQbtIuRBKjodCxzrhN</a></td></tr></tbody></table>


# Огляд

Безкодові конфігурації дозволяють створювати робочі процеси верифікації без коду через зручний інтерфейс.

### Вступ

Безкодові конфігурації дозволяють створювати та налаштовувати робочі процеси верифікації особи **без написання жодного рядка коду.** Ця функція надає зручний інтерфейс, у якому ви можете визначати кроки, встановлювати параметри та автоматизувати процеси верифікації відповідно до потреб вашого бізнесу. Незалежно від того, чи коригуєте ви правила верифікації, чи додаєте додаткові заходи безпеки, чи оптимізуєте процес залучення користувачів, безкодові конфігурації дають вам повний контроль — без потреби в ресурсах розробки.

### **Основні переваги**

1. **Простота використання** — Інтерфейс на основі drag-and-drop або форм дозволяє будь-кому налаштовувати робочі процеси без технічної експертизи.
2. **Гнучкість** — Налаштовуйте робочі процеси відповідно до різних потреб верифікації, таких як KYC, AML-перевірка, валідація документів або аналіз підтвердження адреси.
3. **Швидше розгортання** — Вносьте зміни в реальному часі, не чекаючи на розробників, забезпечуючи швидшу адаптацію до регуляторних чи бізнес-потреб.
4. **Масштабованість** — Легко змінюйте та розширюйте робочі процеси в міру зростання вашої компанії та еволюції вимог до верифікації.

### **Як це працює**

Налаштування безкодової конфігурації включає кілька простих кроків: Безкодові конфігурації дозволяють створювати та налаштовувати робочі процеси верифікації особи без написання коду. Використовуйте інтуїтивно зрозумілий інтерфейс, щоб визначити кроки, які відповідають потребам вашого бізнесу.

1. **Доступ до безкодових конфігурацій** — Перейдіть до розділу Configurations у вашій панелі керування та створіть нову.
2. **Визначення кроків робочого процесу** — Оберіть із доступних кроків верифікації, таких як **ID verification, Liveness або Video KYC**, щоб побудувати ваш робочий процес.
3. **Встановлення параметрів** — Налаштуйте окремі кроки та загальні правила робочого процесу, наприклад, перенаправлення користувачів після завершення верифікації.
4. **Тестування та розгортання** — Перегляньте ваш робочий процес, внесіть коригування та активуйте його, створивши нову сесію або скориставшись Configuration ID чи публічним URL.

### **Випадки використання**

Безкодові конфігурації можна застосовувати в різних сценаріях, зокрема:

* **Фінансові послуги** — Налаштуйте автоматизовані робочі процеси KYC для відкриття нових рахунків.
* **Електронна комерція та маркетплейси** — Перевіряйте продавців та покупців перед тим, як дозволити транзакції.
* **Гіг-економіка та платформи найму** — Проводьте верифікацію особи та перевірку біографічних даних для фрилансерів або співробітників.
* **Криптовалюта та фінтех** — Впроваджуйте перевірки на основі відповідності вимогам для AML та запобігання шахрайству.
* **Охорона здоров'я та страхування** — Автентифікуйте користувачів перед наданням доступу до конфіденційних медичних даних або даних полісу.


# Початок роботи

Передумови для створення безкодових конфігурацій.

Щоб почати використовувати безкодові конфігурації, виконайте наведені нижче кроки для забезпечення плавного налаштування та розгортання:

#### Переконайтеся, що у вас є необхідні права доступу

Перш ніж використовувати безкодові конфігурації, переконайтеся, що у вас є необхідний доступ:

* Ця функція **доступна лише для ролі Адміністратор**. (Детальніше див. в розділі [**Огляд ролей користувачів**.](/identomat-documentation-ukr/pochatok-roboti/oglyad-rolei-koristuvachiv))
* Якщо у вас немає необхідних прав доступу, зверніться до вашого системного адміністратора або до нашої команди підтримки за допомогою.
* Якщо ви є **Адміністратором**, але кнопка **`+ New configuration`** недоступна, можливо, ваш обліковий запис перебуває на **пробному тарифі**. У цьому випадку, будь ласка, зв'яжіться з нами, щоб увімкнути повний доступ.

#### Перейдіть до розділу конфігурацій

* **Увійдіть** у вашу панель керування та перейдіть до **Settings** у навігаційному меню. Знайдіть розділ **Configurations** та натисніть на нього.
* Натисніть **`+ New configuration`**, щоб почати створення робочого процесу.
* Якщо ви користуєтеся цією функцією вперше, ознайомтеся з інтерфейсом та доступними опціями. Ви можете створювати **необмежену кількість конфігурацій** — ця функція **безкоштовна на всіх платних тарифах**.

#### Оберіть тип верифікації

Перш ніж обирати окремі кроки, оберіть **тип верифікації** для вашого робочого процесу:

* **KYC (Know Your Customer)** — Призначено для верифікації окремих користувачів. Підтримує особисті документи, що посвідчують особу, перевірку живості, відеодзвінки та інші кроки верифікації, орієнтовані на фізичних осіб.
* **KYB (Know Your Business)** — Призначено для верифікації юридичних осіб та організацій. Дозволяє перевіряти бізнес-документи та проводити пов'язані перевірки, специфічні для компаній та їхніх представників. Обраний тип верифікації визначає, які кроки будуть доступні в робочому процесі.

#### **Перегляньте доступні кроки верифікації**

Ознайомтеся з кроками верифікації, доступними для вашого робочого процесу, зокрема:

* **ID verification** — Користувачі надають документи, що посвідчують особу, для перевірки.
* **Liveness check** — Забезпечує підтвердження того, що користувач присутній та є реальною особою під час верифікації.
* **Video call** — Проводить сесії живої відеоверифікації.
* **Proof of Address** — Включає перевірку підтвердження адреси та аналіз інших типів документів.

#### **Створіть вашу першу конфігурацію**

* Завершіть побудову вашого потоку, **перетягуючи (drag-and-drop)** або **обираючи** необхідні кроки верифікації.
* Визначте ключові налаштування відповідно до ваших вимог верифікації, наприклад:
  * **Необхідні типи документів** (наприклад, паспорт, ID-картка, водійське посвідчення)
  * **Ліміти повторних спроб для Liveness**, щоб контролювати кількість спроб користувача
  * **URL-адреси перенаправлення** після успішної або невдалої верифікації
  * **Дозволені країни документів** для визначення прийнятних регіонів
* Після завершення всіх налаштувань **збережіть вашу конфігурацію**, щоб зробити її доступною для використання.

#### **Протестуйте перед запуском**

* Запустіть тестові сесії з панелі керування, щоб перевірити поведінку робочого процесу. Ви можете створити тестову сесію, обравши вашу конфігурацію та натиснувши **Generate link**.
* Перевірте:
  * Правильне виконання кроків та потоку
  * Точність результатів верифікації
  * Очікувані перенаправлення та сповіщення
* Внесіть необхідні коригування на основі результатів тестування.

#### **Розгорніть та відстежуйте**

* Після завершення налаштування вашої конфігурації розгорніть її одним із таких способів:
  * **Створіть нову сесію** з панелі керування
  * Використайте **Configuration ID** в API-запитах
    * *Ваш Configuration ID доступний на сторінці деталей конфігурації.*
  * Поділіться **публічним URL (Public URL)** для доступу кінцевих користувачів
* Після розгортання відстежуйте результати верифікації та статуси сесій у розділі **Dashboard**.


# Локалізація

Перекладайте опитувальники, заголовки кроків, описи та інші тексти інтерфейсу безпосередньо в конструкторі конфігурацій, щоб кінцеві користувачі бачили віджет верифікації обраною мовою.

#### Як працює локалізація

**Передумова: крок Мова (Language step)**

* **Призначення**: Локалізація стає доступною лише після додавання **кроку Мова (Language step)** до вашої конфігурації. Цей крок визначає, які додаткові мови можуть обирати користувачі під час верифікації.
* **Порада**: Спочатку додайте крок Мова, а потім повертайтеся, щоб перекласти ваш контент — якщо кроку Мова не існує, конструктор поводиться як одномовний, і селектор мови не з'являється.

#### **Селектор мови**

* **Призначення**: Щойно крок Мова існує, у нижній частині конструктора конфігурацій з'являється селектор, який дозволяє обрати, для якої мови ви наразі редагуєте контент.
* **Як це працює**:
  * Селектор видимий постійно, незалежно від того, з яким кроком чи розділом ви працюєте
  * Ваша **мова за замовчуванням** (встановлена в налаштуваннях конфігурації) завжди відображається першою та попередньо обрана
  * Усі інші мови, додані через крок Мова, відображаються нижче неї
  * Використовуйте поле пошуку, щоб швидко знайти мову у довгому списку
  * Натисніть **Add more**, щоб перейти до кроку Мова та додати або видалити доступні мови
* **Порада**: Уявіть селектор як перемикач *«якою мовою я зараз пишу»* — він застосовується до кожного перекладного поля в конструкторі: заголовків кроків, описів, заголовків опитувальників, запитань, варіантів відповідей та попередньо заповнених відповідей.

***

#### Режими редагування

**Мова за замовчуванням — повне редагування** Коли обрано мову за замовчуванням, у вас є повний контроль над вашою конфігурацією:

* Додавайте або видаляйте запитання та варіанти відповідей
* Редагуйте структуру та ключі, налаштовуйте параметри кроків
* Редагуйте всі заголовки, мітки та описи Це ваше «джерело істини» — усі переклади посилаються на те, що написано тут. **Мова перекладу — режим лише перекладу**
* **Призначення**: Коли ви переходите до будь-якої мови, відмінної від мови за замовчуванням, конструктор переходить в обмежений **режим лише перекладу**, щоб ви могли безпечно додавати текст, не змінюючи випадково структуру вашого потоку.
* **Що відбувається**:
  * Кожне текстове поле показує ваш текст мовою за замовчуванням як **плейсхолдер**, тож у вас завжди є оригінал, з якого можна перекладати
  * Структурне редагування вимкнено — ви можете редагувати лише текст, без можливості додавати, видаляти чи змінювати порядок елементів
* **Порада**: Якщо вам потрібно щось перебудувати (додати запитання, видалити варіант відповіді тощо), спочатку поверніться до мови за замовчуванням — режим перекладу призначений виключно для тексту. **Якщо у вашій конфігурації є помилки**
* Якщо ви намагаєтеся увійти в режим перекладу, коли ваша конфігурація має невирішені помилки, ви побачите підказку **«Fix errors before translating»**, яка просить спочатку їх вирішити.
* **Порада**: Вирішіть помилки валідації мовою за замовчуванням перед початком роботи над перекладом, щоб уникнути цього переривання.

***

**Збереження перекладів**

* Окремої кнопки «Готово» для перекладів немає — усе зберігається за допомогою основної кнопки **Save**, так само як і контент мовою за замовчуванням.
* Ви можете перекладати стільки, скільки забажаєте:
  * Зберігаються лише ті мови, які ви дійсно редагували
  * Лише ті поля, які ви дійсно переклали, містять текст цією мовою
  * Часткові переклади цілком допустимі — нічого не має бути «завершеним» перед збереженням

***

**Як віджет відображає переклади**

* **Призначення**: Контролює, що бачить кінцевий користувач, коли використовує віджет верифікації обраною мовою.
* **Як це працює**:
  * Якщо переклад для мови користувача існує, він відображається
  * Якщо переклад для конкретного поля відсутній, віджет автоматично повертається до мови за замовчуванням лише для цього поля
  * Часткові переклади ніколи не спричиняють помилок — користувачі просто бачать поєднання перекладеного тексту та тексту мовою за замовчуванням там, де це потрібно&#x20;

**Зміна мови за замовчуванням пізніше**&#x20;

Якщо ви змінюєте мову за замовчуванням, коли контент уже існує, система автоматично перепризначає ваш наявний контент до нового ключа мови за замовчуванням — і ніколи не перезаписує контент, який уже існує під цим ключем. Це дозволяє безпечно змінювати мову за замовчуванням, не втрачаючи перекладену роботу.


# Налаштування конфігурації

Розуміння налаштувань конфігурації на першій вкладці безкодового конструктора

Перша вкладка безкодового конструктора — це місце, де ви знайдете основні налаштування для налаштування та конфігурації вашого робочого процесу.

### Налаштування конфігурації

Розділ **Налаштування конфігурації** включає ключові параметри, пов'язані з ідентифікацією та організацією ваших робочих процесів. Ось огляд налаштувань, з якими ви зіткнетеся:

#### Назва конфігурації

* **Призначення**: Назва, присвоєна конфігурації для легкої ідентифікації в панелі керування. Вона має бути унікальною в межах вашої компанії, але її можна змінити в будь-який час.
* **Порада**: Оберіть описову назву, яка відображає призначення чи конкретне використання конфігурації (наприклад, «Стандартний потік верифікації ID» або «Onboarding для KYC»). Це полегшує пошук та керування робочими процесами.

#### Configuration ID

* **Призначення**: Унікальний ідентифікатор, який автоматично генерується при створенні конфігурації. Цей ID використовується для посилання на конфігурацію в API-запитах, забезпечуючи застосування правильного робочого процесу під час верифікації користувача.
* **Порада**: Використовуйте Configuration ID у викликах API або під час прив'язки конфігурації до зовнішніх систем. Тримайте його напоготові для цілей інтеграції.

#### Public URL

* **Призначення**: Public URL надає зовнішній доступ до вашого потоку верифікації. Поділіться ним з користувачами, щоб направити їх до процесу верифікації — через запрошення електронною поштою, вбудовані посилання чи інші канали.
* **Як це працює**: Кожен Public URL містить унікальний параметр `public_config_id`, який ідентифікує ваш потік верифікації:

```
  https://widget.identomat.com/launch/?public_config_id=<public-id>
```

Коли користувач відкриває цей URL, платформа автоматично створює нову сесію та перенаправляє його на унікальний URL сесії:

```
  https://widget.identomat.com/?session_token=<generated_token>
```

`public_config_id` залишається незмінним для всіх користувачів — новий `session_token` генерується для кожної окремої сесії.

* **Активація**: Public URL **вимкнено за замовчуванням**. Вам потрібно буде **увімкнути** його, перш ніж ви зможете скопіювати та поділитися посиланням.
* **Тимчасове вимкнення**: Вимкнення Public URL забороняє доступ без остаточного видалення. Ви можете повторно увімкнути його в будь-який час.
* **Оновлення URL**: Використовуйте кнопку **`Refresh`**, щоб остаточно замінити поточний Public URL на новий. Це генерує новий `public_config_id`, роблячи попередній URL недійсним — усі, хто використовує стару посилання, більше не зможуть отримати доступ до потоку. **Цю дію неможливо скасувати.**
* **Порада**: Діліться Public URL лише з довіреними сторонами. Якщо доступ потрібно тимчасово призупинити, вимкніть URL замість того, щоб оновлювати його, щоб ви могли відновити його пізніше.

#### Мова за замовчуванням

* **Призначення**: Встановіть мову за замовчуванням для потоку верифікації. Це визначає мову, якою кроки верифікації, інструкції та сповіщення відображатимуться користувачеві.
* **Порада**: Оберіть мову, яка найкраще відповідає основній базі користувачів для цього робочого процесу. Якщо ви заздалегідь не впевнені щодо бажаної мови користувача, ви можете налаштувати **крок Мова (Language step)** у вкладці **Steps**.
  * У цьому випадку **мова за замовчуванням**, яку ви оберете тут, буде попередньо обрана для користувача, коли він вперше зіткнеться з кроком вибору мови. Проте користувачі все одно матимуть можливість змінити її, якщо вони віддають перевагу іншій мові.

#### Групи з доступом

* **Призначення:** Визначте, які групи користувачів у межах вашої компанії можуть використовувати цю конфігурацію. Це налаштування контролює видимість та доступ на рівні групи.\
  Якщо ви оберете одну або декілька груп, *лише* учасники цих груп зможуть бачити та використовувати конфігурацію у своїй панелі керування.\
  Якщо ви **не** оберете жодної групи, конфігурація стане видимою та доступною для **всіх** у компанії.
* **Як це працює:** Це поле представлене у вигляді **випадаючого списку з множинним вибором**, що містить усі групи, доступні в компанії. Ви можете обрати одну або декілька, залежно від того, як ви хочете обмежити доступ.
* **Порада:** Використовуйте цю опцію для керування доступом для різних команд, наприклад, розділення потоків внутрішнього тестування, виробничих робочих процесів або конфігурацій, специфічних для відділу (наприклад, «Fraud team», «Support team», «KYC operations»). Обмеження доступу допомагає уникнути випадкових змін або несанкціонованого використання.

***

### Налаштування сесії

Розділ **Налаштування сесії** дозволяє налаштовувати різні аспекти процесу сесії верифікації, контролюючи тривалість сесій, спосіб доступу до них та специфічні правила верифікації. Ось огляд налаштувань, з якими ви зіткнетеся:

#### Тривалість сесії (у хвилинах)

* **Призначення**: Визначає максимальну тривалість (у хвилинах), протягом якої сесія верифікації залишатиметься активною. Після закінчення цього часу сесія завершиться, і користувачеві потрібно буде почати процес верифікації заново.
* **Порада**: Вкажіть тривалість сесії в хвилинах відповідно до ваших вимог безпеки. Наприклад, ви можете встановити 15 хвилин для швидкої верифікації або довше для більш детальних процесів.

#### Заплановані сесії

* **Призначення**: Коли перемикач **Schedule Session** увімкнено, це дозволяє запланувати сесію верифікації на конкретну дату та час у майбутньому. Це особливо корисно для налаштування потоків верифікації заздалегідь, надаючи користувачам можливість забронювати свою сесію на пізніший час, а не розпочинати її негайно.
* **Порада**: Увімкніть цей перемикач, якщо ви хочете надати користувачам гнучкість для бронювання своєї сесії верифікації заздалегідь. Бронювання з боку користувача відбуватиметься на вашій платформі, тоді як сама сесія може бути запланована на нашій платформі на визначену дату та час. Це гарантує, що сесії верифікації керуються відповідно до бажаного вами графіка та зручності користувача.

#### **Запит додаткової інформації**

* **Призначення**: Коли увімкнено, дозволяє операторам запитувати подальшу верифікацію у заявника після того, як сесія вже досягла кінцевого статусу (approved, rejected, manual check або expired), без створення нової сесії. Усі спроби верифікації залишаються збереженими в межах тієї ж сесії, зберігаючи повний аудиторський слід.
* **Порада**: Увімкніть це налаштування для робочих процесів, де може знадобитися повторна верифікація — наприклад, коли потрібні додаткові документи або попереднє подання було неповним.
* **За замовчуванням**: Вимкнено за замовчуванням. Після увімкнення оператори побачать кнопку **Request more information** на відповідних сесіях у Manage.

#### Примусово перевести користувача на мобільний пристрій

* **Призначення**: Коли увімкнено, це налаштування змушує користувача завершити процес верифікації на мобільному пристрої. На початку сесії відображатиметься **QR-код**, який користувач може відсканувати, щоб продовжити верифікацію на своєму мобільному пристрої. Це гарантує, що весь процес верифікації відбувається на мобільному пристрої, що є важливим для процесів, які потребують специфічних мобільних функцій.
* **Порада**: Увімкніть цей перемикач, якщо ваш процес верифікації розроблено як mobile-first або він потребує специфічних мобільних функцій.

#### Дозволити користувачу продовжити на іншому пристрої

* **Призначення**: Коли увімкнено, ця опція дозволяє користувачам відновити процес верифікації на іншому пристрої. Це корисно у випадках, коли користувачі розпочинають верифікацію на одному пристрої, але їм потрібно перейти на інший (наприклад, з комп'ютера на мобільний пристрій).
* **Порада**: Увімкніть цей перемикач, щоб надати гнучкість користувачам, яким може знадобитися змінити пристрій без втрати прогресу.

#### Обмежити поширення URL

* **Призначення**: Коли увімкнено, це налаштування забороняє користувачам ділитися URL сесії з іншими. Це гарантує, що лише авторизовані користувачі можуть отримати доступ до потоку верифікації, і додає додатковий рівень безпеки.
* **Порада**: Використовуйте цю опцію, якщо потік верифікації містить конфіденційні або процеси з високим рівнем безпеки, які не повинні бути доступні небажаним користувачам.

#### Вимагати FHD-камеру

* **Призначення**: Коли увімкнено, це налаштування гарантує, що користувачі виконують усі **кроки, що потребують камери** — такі як **перевірка живості**, **захоплення документа** або **селфі** — використовуючи камеру **Full HD (FHD)**. Це допомагає підтримувати високу якість вхідних зображень, що є критично важливим для точної верифікації особи та виявлення шахрайства.
* **Порада**: Увімкніть цю опцію, якщо ваш процес потребує **чітких зображень високої роздільної здатності** для відповідності стандартам якості чи технічної точності. Якщо пристрій користувача не відповідає вимозі FHD, йому може бути запропоновано змінити пристрій, або він не зможе продовжити.

#### Скринінг

* **Призначення**: Вмикає або вимикає скринінг як частину процесу верифікації. Скринінг зазвичай включає перевірку даних користувача проти зовнішніх наборів даних (наприклад, списків спостереження, санкційних списків) для забезпечення відповідності вимогам.
* **Порада**: Увімкніть цей перемикач, якщо скринінг є частиною вашого процесу верифікації, і ви хочете переконатися, що користувачі перевіряються за конкретними наборами даних.
* **Активація:** Скринінг доступний лише на платних тарифах. Якщо ви на пробному тарифі, він може працювати некоректно. Для повного доступу до функцій скринінгу вам потрібно буде звернутися до нашої команди підтримки, щоб забезпечити наявність відповідних прав доступу.
* **Мінімальний бал скринінгу**
  * **Призначення**: Мінімальний бал скринінгу дозволяє встановити пороговий бал, якому користувач має відповідати, щоб пройти етап скринінгу. Якщо бал скринінгу користувача перевищує цей поріг, його буде відхилено. Ця функція допомагає гарантувати, що лише користувачі, які відповідають необхідним стандартам відповідності, продовжують процес верифікації.
  * **Порада**: Встановіть цей бал відповідно до вашої стратегії управління ризиками або стандартів відповідності. Наприклад, якщо ваша політика відповідності вимагає точної відповідності даним скринінгу, ви можете встановити поріг проходження на рівні **85%**.
* **Набори даних для скринінгу**
  * **Призначення**: Опція наборів даних для скринінгу дозволяє обрати, які зовнішні набори даних використовувати під час процесу верифікації. Ці набори даних допомагають перевірити особу користувача, порівнюючи його дані з різними списками.
  * **Набори даних включають**:
    * **Default**
    * **UN Sanctions**
    * **Georgian Sanctions**
    * **Adverse Media**
  * **Порада**: Оберіть відповідні набори даних залежно від вашої галузі, регуляторних вимог або бізнес-потреб. Наприклад, якщо ваша організація працює на міжнародному рівні, вам може знадобитися використовувати глобальні санкційні списки, тоді як локальний бізнес може зосередитися більше на національних або регіональних базах даних.
* **Коли запускати скринінг**
  * **Призначення:** Визначає, **на якому етапі потоку верифікації виконується скринінг**. Це налаштування контролює, чи застосовується скринінг лише до затверджених сесій, чи до всіх завершених сесій, включно з відхиленими.
  * **Опції:**
    * **Після затвердження сесії:** Скринінг виконується **лише для сесій, які були затверджені**.\
      Відхилені сесії не скринінгуються.
    * **Після завершення сесії:** Скринінг виконується для **всіх завершених сесій**, незалежно від того, чи була сесія затверджена, чи відхилена.
  * **Порада:** Використовуйте **«Після затвердження сесії»**, якщо ви хочете мінімізувати обсяг та вартість скринінгу, скринінгуючи лише успішні верифікації.\
    Використовуйте **«Після завершення сесії»**, якщо ваша політика відповідності вимагає скринінгу всіх користувачів, які дійшли до кінця потоку верифікації, включно з відхиленими випадками.

#### Виявлення VPN

* **Призначення**: Визначає, чи підключений заявник через VPN під час своєї сесії верифікації. Коли увімкнено, ви можете визначити, як сесія повинна реагувати, якщо виявлено VPN-з'єднання, дозволяючи вам застосовувати суворіший контроль доступу або позначати підозрілу активність.
* **Порада:** Увімкніть цей перемикач, якщо ваша політика відповідності або стратегія управління ризиками вимагає моніторингу використання VPN.

> ⚠️ Виявлення VPN — це платне додаткове рішення. Зверніться до нашої команди, щоб увімкнути його для вашого облікового запису.

**Якщо виявлено VPN**

* **Призначення:** Визначає дію, яка виконується, коли під час сесії виявлено VPN-з'єднання. Це налаштування з'являється, коли увімкнено виявлення VPN.\
  Опції:
  * **Нічого не робити:** Сесія продовжується у звичайному режимі. Використання VPN фіксується, але не впливає на результат.
  * **Відхилити сесію:** Сесія автоматично відхиляється в кінці, якщо було виявлено VPN.
  * **Позначити для ручної перевірки:** Сесія позначається для ручного перегляду в кінці, дозволяючи оператору прийняти остаточне рішення щодо затвердження чи відхилення.
* **Порада:** Оберіть дію, яка відповідає вашій толерантності до ризику. Використовуйте **«Відхилити сесію»** для потоків з високим рівнем безпеки, де використання VPN є неприйнятним. Використовуйте **«Позначити для ручної перевірки»**, якщо ви віддаєте перевагу людському нагляду перед прийняттям остаточного рішення.

***

### Інші налаштування

Розділ **Інші налаштування** включає додаткові опції конфігурації для покращення процесу верифікації. Ось огляд налаштувань, які ви знайдете:

#### Return URL

* **Призначення**: Return URL — це користувацький URL, на який перенаправляються користувачі після завершення процесу верифікації. Його можна використовувати, щоб направити користувачів на конкретну сторінку чи дію, наприклад, сторінку підтвердження, панель керування або будь-яке інше місце, релевантне для вашого робочого процесу.
* **Порада**: Визначте Return URL, щоб гарантувати плавне перенаправлення користувачів після процесу верифікації. Це особливо корисно, якщо вам потрібно, щоб користувачі потрапляли на сторінку після верифікації (наприклад, сторінку успіху або інструкції щодо наступного кроку).

#### Передати користувацький QR URL

* **Призначення**: Якщо ви використовуєте функцію **«Примусово перевести користувача на мобільний пристрій»**, ви можете надати користувацький **QR URL**. Це дозволяє передати унікальний URL у QR-коді, який користувачі сканують, щоб продовжити процес верифікації на своїх мобільних пристроях.
* **Порада**: Увімкніть цю опцію, якщо ви хочете, щоб QR-код вів на конкретний URL. Це можна використовувати для спеціальних робочих процесів або даних, специфічних для користувача.

#### Увімкнути SMS-сповіщення

* **Призначення**: Ця опція дозволяє надсилати **SMS-сповіщення** користувачам, які можуть включати **одноразові паролі (OTP)** або інші критично важливі оновлення, пов'язані з процесом верифікації. SMS-сповіщення корисні для автентифікації користувачів, нагадувань та попереджень.
* **Порада**: Увімкніть **SMS-сповіщення**, якщо ваш процес верифікації потребує спілкування з користувачами в реальному часі, наприклад, для надсилання OTP чи нагадувань про сесію. Переконайтеся, що ви збираєте номери телефонів користувачів у рамках робочого процесу, щоб ефективно використовувати цю функцію.

#### Повторне розпізнавання обличчя

* **Призначення**: Повторне розпізнавання обличчя використовує базу даних облич для збереження біометричних даних облич користувачів для майбутніх сесій верифікації. Це покращує виявлення шахрайства, групуючи сесії в межах функції **personas**, дозволяючи відстежувати користувачів у декількох спробах верифікації.
* **Порада**: Увімкніть цю функцію, якщо вам потрібно відстежувати користувачів з часом та підвищити безпеку, виявляючи повторних користувачів та потенційне шахрайство. Це особливо корисно для KYC, AML та інших процесів, пов'язаних з відповідністю вимогам, де важливо розпізнавати того самого користувача в різних сесіях.


# Кроки KYC

Розуміння кроків для конфігурації KYC на другій вкладці безкодового конструктора

## Огляд

1. **Доступні кроки (лівий панель)**
   * Цей розділ містить усі кроки верифікації, які ви можете включити у ваш робочий процес.
   * Кроки можуть включати Language, ID verification, Liveness check, Selfie with ID, Proof of Address, Video call, User questionnaire, Operator questionnaire, Phone number, Email, Geolocation.
   * **Натисніть на кроки** у лівому розділі, щоб додати їх до вашого робочого процесу.
2. **Конструктор кроків (середня панель)**
   * Відображає **поточні кроки** у вашому потоці верифікації.
   * Ви можете **змінювати порядок** кроків, перетягуючи їх, щоб змінити послідовність виконання.
   * Непотрібні кроки можна **видалити**, якщо вони більше не потрібні.
3. **Налаштування кроку (права панель)**
   * Коли крок обрано, його параметри з'являються в цій панелі.
   * Ви можете **налаштувати параметри**, такі як ліміти повторних спроб, вибір типу документа.
   * Розширені налаштування (наприклад, ключі кроків) також можна керувати тут.

## Налаштування кроку

Панель налаштувань кроку дозволяє точно налаштувати кожен крок верифікації, коригуючи його специфічні параметри відповідно до потреб вашого бізнесу та вимог відповідності. Коли крок обрано, ця панель надає опції конфігурації.

**Заголовки кроків з'являються у двох місцях:** на індикаторі прогресу, показаному користувачам, які відновлюють потік на мобільному пристрої чи комп'ютері, та у вікні оператора під час відеодзвінка, де вони використовуються для ручного запуску кроків.

### **Заголовки кроків**

* **Призначення**: Заголовки кроків використовуються для відображення в різних контекстах:
  * Коли користувач переходить на мобільний пристрій, екран комп'ютера показує поточний крок, на якому він перебуває.
  * Під час **верифікації через відеодзвінок** оператор бачить заголовки кроків у своєму інтерфейсі, щоб вручну запускати або відстежувати процес верифікації.
* **Порада**: Обирайте чіткі та описові заголовки кроків, щоб покращити досвід користувача та допомогти операторам ефективно орієнтуватися в процесі.

### Вкладка Advanced

Вкладка **Advanced** зберігає всі необхідні ключі для кроків, запитань та відповідей, щоб полегшити інтеграцію із зовнішніми системами. Ці ключі можна використовувати для інтеграцій API або інших зовнішніх застосунків, що взаємодіють із потоком верифікації.

**Призначення**

* **Ключі кроків** – Унікальні ідентифікатори для кожного кроку верифікації.
* **Ключі запитань** – Ідентифікатори для конкретних запитань у формах чи опитувальниках.
* **Ключі відповідей** – Відповідні ключі для відповідей, наданих користувачами в кроках-опитувальниках.

Ці ключі забезпечують безперешкодну інтеграцію з іншими системами та полегшують відстеження й звітність даних.

***

## Кроки

### Мова (Language)

* **Призначення**: Крок Мова дозволяє користувачам обрати бажану мову інтерфейсу з випадаючого списку перед продовженням верифікації.
* **Позиціювання**: Цей крок **завжди розташований першим** у робочому процесі.
* **Параметри кроку**:
  * Визначте список **доступних мов**, з яких користувачі можуть обирати.
  * Ви маєте обрати щонайменше **дві мови**, щоб увімкнути випадаючий список вибору.
* **Порада**: Якщо ваші користувачі переважно розмовляють певною мовою, розгляньте можливість встановлення **мови за замовчуванням** у загальних налаштуваннях, при цьому все ще пропонуючи альтернативні варіанти для доступності.

***

### ID verification (Верифікація документа, що посвідчує особу)

**Призначення**: Крок ID verification відповідає за перевірку основних документів, що посвідчують особу користувача. Цей крок включає кілька опцій конфігурації для забезпечення автентичності документа та відповідності вимогам верифікації.

**Тип документа**

Визначає, які типи документів, що посвідчують особу, користувач може обрати для верифікації. Опції включають:

* ID-картка
* Паспорт
* Посвідка на проживання
* Водійське посвідчення

#### **Метод**

Визначає, як користувачі можуть подати свій документ, що посвідчує особу:

* **Capture** – Користувач має зробити живе фото документа.
* **Upload** – Користувач може завантажити наявне зображення документа.
* **Both** – Користувач може обрати будь-який із варіантів.

#### **Інші параметри**

**Порівняння полів документа**

* Порівнює текстову інформацію між **візуальною зоною документа (VIZ)** та **машинозчитуваною зоною (MRZ)**.
* Забороняє користувачам пройти верифікацію, якщо поля не збігаються.

**Порівняння сторінок документа**

* Гарантує, що **лицьова та зворотна сторони** належать до одного документа.
* У разі виявлення розбіжностей сесія **відхиляється.**

**Блокування прострочених документів**

* Відхиляє користувачів, якщо термін дії документа **вже минув**.

**Виявлення спуфінгу**

* Виявляє спроби використання **підроблених або змінених** документів, що посвідчують особу, та **відхиляє** такі сесії.

**Виявлення чорно-білого зображення**

* Визначає, чи є документ **чорно-білим (grayscale)**, і **відхиляє** його для забезпечення автентичності.

**Виявлення візуальних пошкоджень**

* Сканує документ на предмет **фізичних дефектів**, таких як пошкоджений чип.

**Попередити, якщо термін дії документа закінчується протягом (днів)**

* Надсилає **попередження**, якщо термін дії документа закінчиться протягом зазначеної кількості днів.

**Відхилити, якщо термін дії документа закінчується протягом (днів)**

* **Відхиляє** сесію, якщо термін дії документа закінчується протягом зазначеного періоду.

**Блокувати особу молодше (років)**

* Відхиляє користувачів **молодших** за зазначену вікову межу.

**Дозволені країни документів**

* Обмежує верифікацію документів **конкретними країнами**.
* Забороняє користувачам проходити верифікацію, якщо документ виданий у не зазначеній країні.

#### **Перевірка даних документа**

**Увімкнути редагування даних документа**

* Коли увімкнено, заявнику/оператору показується сторінка перегляду після сканування документа, що дозволяє їм перевірити та виправити дані, витягнуті через OCR, перед продовженням.
* Вимкнено за замовчуванням.

**Хто може редагувати**

* Визначає, які сторони мають право редагувати поля документа. Опції:
  * **Лише користувач** – Лише заявник може вносити виправлення.
  * **Лише оператор** – Лише оператор може вносити виправлення в Manage.
  * **Обидва** – І заявник, і оператор можуть вносити виправлення.

**Редаговані поля**

* Визначає, які поля документа доступні для виправлення. Для кожного поля ви можете встановити:
  * **Обов'язкове** – Чи має поле бути заповненим, перш ніж заявник зможе продовжити.

Повний перелік настроюваних полів та деталі поведінки див. у розділі Перевірка даних документа у Концепціях платформи.

Для конфігурації цієї функції на рівні API див. Конфігурація перевірки даних документа у Посібнику для розробників.

***

### Liveness check (Перевірка живості)

**Призначення:** Крок Liveness check гарантує, що користувач є реальною, живою людиною, а не підробленим чи маніпульованим зображенням. Під час цього кроку користувач розташовує своє обличчя в межах визначеної рамки та дотримується інструкцій.

Identomat пропонує два типи перевірки живості:

#### **Тип живості: Активна (Active liveness)**

* **Розширена біометрична перевірка**, під час якої користувачеві пропонується виконати конкретні дії (наприклад, кліпнути очима, повернути голову), щоб підтвердити свою присутність як реальної людини.
* Розроблена для запобігання **спробам спуфінгу** з використанням фотографій, відео чи масок.

#### **Тип живості: Пасивна (Passive liveness)**

* **Базова перевірка живості**, під час якої користувач просто утримує голову в межах овальної рамки.
* Система знімає **двосекундне відео** для аналізу та підтвердження живості.

#### **Метод для пасивної перевірки живості**

Визначає, як виконується перевірка живості:

* **Capture** – Користувач має зняти живе відео за допомогою камери свого пристрою.
* **Upload** – Користувач може завантажити селфі.
* **Both** – Користувач може обрати будь-який із варіантів.

#### **Максимальна кількість спроб для перевірки живості**

* Визначає **максимальну кількість спроб**, дозволених користувачеві для завершення перевірки живості.
* Якщо користувач перевищує цей ліміт, сесія **відхиляється**, і йому потрібно розпочати процес заново.

***

### Selfie with ID (Селфі з документом)

**Призначення:** Крок Selfie with ID гарантує, що користувач фізично присутній зі своїм документом, що посвідчує особу. Користувачі мають тримати свій документ у руках так, щоб і **обличчя, і документ** були чітко видимі на знятому зображенні.

#### **Метод**

Визначає, як користувач подає своє селфі з документом:

* **Capture** – Користувач має зробити живе фото за допомогою камери свого пристрою.
* **Upload** – Користувач може завантажити наявне зображення, на якому він тримає свій документ.
* **Both** – Користувач може обрати будь-який із варіантів.

***

### **Proof of Address (Підтвердження адреси)**

**Призначення:** Крок Proof of Address перевіряє адресу проживання користувача шляхом аналізу офіційних документів, що містять його ім'я та адресу.

#### **Тип документа**

Користувачі можуть завантажити один із наступних прийнятних документів як Proof of Address:

* Банківська виписка
* Рахунок за комунальні послуги
* Водійське посвідчення
* Свідоцтво про реєстрацію транспортного засобу
* Yellow Slip

***

### Video call (Відеодзвінок)

**Призначення:** Крок Video call з'єднує користувача з оператором для **ручної верифікації особи**. Оператор може взаємодіяти з користувачем у реальному часі та за потреби ініціювати інші кроки верифікації.

Identomat підтримує два типи відеодзвінків:

* **Дзвінок один на один** – Безпечний прямий відеодзвінок між клієнтом та оператором верифікації.
* **Багатокористувацький дзвінок** – Дозволяє **декільком учасникам** брати участь в одній сесії, де кожен користувач проходить свій власний налаштований потік верифікації.

#### **Кнопка `+ New step`**

Додає кроки верифікації в межах процесу відеодзвінка, дозволяючи оператору запускати їх вручну.

**Тип дзвінка**

* **Один учасник** – Відеодзвінок один на один.
* **Декілька учасників** – Багатокористувацький відеодзвінок.

**Ім'я учасника**

* Якщо увімкнено, **користувач має ввести своє ім'я**, перш ніж приєднатися до дзвінка.

**Примусово увімкнути камеру користувача**

* Якщо увімкнено, **користувач не може вимкнути свою камеру** під час дзвінка.

**Скинути верифікацію**

* Якщо користувач **від'єднується та повторно приєднується**, усі попередні дані верифікації видаляються з міркувань безпеки, і оператору потрібно розпочати процес заново.

***

### User questionnaire (Опитувальник користувача)

**Призначення:** Крок User questionnaire призначений для збору структурованих даних від користувача через різні типи форм. Надана інформація безпечно зберігається в межах сесії верифікації. Кроки-опитувальники пропонують широкий спектр настроюваних форматів запитань.

#### **Деталі опитувальника**

* **Заголовок** – Основний заголовок опитувальника.
* **Опис** – Короткий текст, що відображається під заголовком для надання контексту.
* **Текст кнопки успіху** – Настроюваний текст для кнопки підтвердження.

#### **Запитання та відповіді**

Identomat підтримує різні типи запитань, кожен з яких пропонує настроювані параметри:

#### **Коротка відповідь (Short answer)**

Користувачі можуть ввести відповідь на відкрите запитання.

* **Заголовок запитання** – Мітка для запитання.
* **Формат відповіді** - Визначає очікувану структуру відповіді користувача. Це налаштування контролює, як перевіряється введення та який тип даних приймає система.
  * **Вільний текст (Free text)** - Користувачі можуть вводити будь-який текст без обмежень.
  * **Email -** Користувачі мають ввести дійсну адресу електронної пошти; система забезпечує перевірку формату email.
* **Попередньо заповнена відповідь** – Попередньо заповнена відповідь, яку користувач може редагувати.
* **Обов'язкове** – Визначає, чи потрібно відповісти на запитання.
* **Режим лише читання** – Забороняє користувачам редагувати відповідь за замовчуванням.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Прапорці (Checkbox — множинний вибір)**

Користувачі можуть обрати один або декілька заздалегідь визначених варіантів.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо позначені варіанти, які користувачі можуть змінити.
* **Обов'язкове** – Визначає, чи має бути обраний принаймні один варіант.
* **Режим лише читання** – Забороняє користувачам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте декілька варіантів для вибору.

#### **Перемикач (Radio — одиничний вибір)**

Користувачі можуть обрати лише один варіант із заздалегідь визначеного списку.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо обраний варіант, який користувачі можуть змінити.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим.
* **Режим лише читання** – Забороняє користувачам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте доступні варіанти.

#### **Завантаження файлу (File upload)**

Користувачі можуть завантажувати файли, такі як зображення чи PDF.

* **Заголовок запитання** – Мітка для запитання.
* **Опис** – Додаткові інструкції, що відображаються під заголовком.
* **Максимальна кількість файлів** – Обмежте кількість файлів, які можуть завантажити користувачі (макс.: 10).
* **Типи файлів** – Обмежте завантаження до **PDF**, **зображень** або обох типів.
* **Обов'язкове** – Визначає, чи є завантаження файлу обов'язковим.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Випадаючий список (Dropdown)**

Дозволяє користувачам обрати одне або декілька значень із заздалегідь визначеного випадаючого списку.

* **Заголовок запитання** – Мітка для запитання.
* **Опції випадаючого списку** – Визначте випадаючий список, надаючи варіанти у форматі через кому (наприклад, *Варіант 1, Варіант 2, Варіант 3*).
* **Множинний вибір** – Якщо увімкнено, користувачі можуть обрати декілька варіантів із випадаючого списку. Якщо вимкнено, користувачі можуть обрати лише один варіант.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим.
* **Повідомлення про помилку** – Повідомлення, що відображається, якщо поле є обов'язковим, але вибір не зроблено.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Вкладення (Attachment)**

Дозволяє користувачам отримувати доступ до файлів, які або завантажені операторами під час сесії, або попередньо прикріплені адміністраторами через безкодовий конструктор чи API.

* **Заголовок** – Мітка для запитання.
* **Опис** – Додаткові інструкції, що відображаються під заголовком.
* **Режим прикріплення файлу (Radio)** – Визначте, як файли надаються користувачеві:
  * **Завантажується оператором під час сесії** – Оператори можуть завантажувати файли під час сесії, які видимі користувачу.
    * **Дозволити зміни у вкладеннях після підтвердження користувача -** Якщо перемикач **вимкнено**, оператор не може редагувати вкладення після того, як користувач **підтвердив** опитувальник. Якщо **увімкнено**, оператор все ще може завантажувати або видаляти файли.
  * **Попередньо прикріплений файл** – Файли, завантажені заздалегідь через безкодові конфігурації або API.
* **Максимальна кількість файлів** – Обмежте кількість файлів, які можуть завантажити користувачі (макс.: 10).
* **Типи файлів (Checkbox)** – Обмежте завантаження до **PDF**, **зображень** або обох типів.
* **Умова** – Поле вкладення з'являється лише за умови виконання вказаної умови.

***

### Operator questionnaire (Опитувальник оператора)

Опитувальник оператора з'являється в сесії, і оператор може заповнити форму під час або після сесії.

#### **Деталі опитувальника**

* **Заголовок** – Основний заголовок опитувальника.
* **Опис** – Короткий текст, що відображається під заголовком для надання контексту.

#### **Запитання та відповіді**

Identomat підтримує **п'ять типів запитань**, кожен із настроюваними параметрами:

#### **Коротка відповідь (Short answer)**

Оператори можуть ввести відповідь на відкрите запитання.

* **Заголовок запитання** – Мітка для запитання.
* **Формат відповіді** - Визначає очікувану структуру відповіді оператора. Це налаштування контролює, як перевіряється введення та який тип даних приймає система.
  * **Вільний текст (Free text)** - Оператори можуть вводити будь-який текст без обмежень.
  * **Email -** Оператори мають ввести дійсну адресу електронної пошти; система забезпечує перевірку формату email.
* **Попередньо заповнена відповідь** – Попередньо заповнена відповідь, яку оператор може редагувати.
* **Обов'язкове** – Визначає, чи потрібно відповісти на запитання.
* **Режим лише читання** – Забороняє операторам редагувати відповідь за замовчуванням.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Прапорці (Checkbox — множинний вибір)**

Оператори можуть обрати один або декілька заздалегідь визначених варіантів.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо позначені варіанти, які оператори можуть змінити.
* **Обов'язкове** – Визначає, чи має бути обраний принаймні один варіант.
* **Режим лише читання** – Забороняє операторам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте декілька варіантів для вибору.

#### **Перемикач (Radio — одиничний вибір)**

Оператори можуть обрати лише один варіант із заздалегідь визначеного списку.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо обраний варіант, який оператори можуть змінити.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим.
* **Режим лише читання** – Забороняє операторам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте доступні варіанти.

#### **Завантаження файлу (File upload)**

Оператори можуть завантажувати файли, такі як зображення чи PDF, безпосередньо в сесію під час заповнення опитувальника. Ці файли стають частиною запису сесії і пізніше можуть бути переглянуті адміністраторами чи іншими авторизованими ролями.

* **Заголовок запитання** – Мітка для поля завантаження.
* **Опис** – Додаткові інструкції, що відображаються під заголовком.
* **Максимальна кількість файлів** – Обмежте кількість файлів, які можуть завантажити оператори (макс.: 10).
* **Типи файлів** – Обмежте завантаження до **PDF**, **зображень** або обох типів.
* **Обов'язкове** – Визначає, чи є завантаження файлу обов'язковим для оператора перед поданням опитувальника.
* **Умова** – Поле завантаження з'являється лише за умови виконання вказаної умови.

#### **Випадаючий список (Dropdown)**

Дозволяє операторам обрати одне або декілька значень із заздалегідь визначеного випадаючого списку під час заповнення опитувальника сесії.

* **Заголовок запитання** – Мітка для поля випадаючого списку.
* **Опції випадаючого списку** – Визначте список варіантів, надаючи значення у форматі через кому (наприклад, *Варіант 1, Варіант 2, Варіант 3*).
* **Множинний вибір** – Якщо увімкнено, оператори можуть обрати декілька варіантів. Якщо вимкнено, можна обрати лише один варіант.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим перед поданням опитувальника.
* **Умова** – Поле випадаючого списку з'являється лише за умови виконання вказаної умови.

***

### Phone number (Номер телефону)

Призначення: Крок Phone number дозволяє збирати або перевіряти номер телефону користувача. Наданий номер телефону зберігається в межах сесії.

#### **Метод**

* **Collect (Зібрати)** – Користувач вводить свій номер телефону, і він зберігається в сесії без перевірки.
* **Verify (Перевірити)** – Користувач вводить свій номер телефону, і надсилається **OTP (одноразовий пароль)**. Номер телефону зберігається лише після успішної перевірки OTP.

***

### Email

**Призначення:** Крок Email дозволяє збирати або перевіряти адресу електронної пошти користувача. Надана адреса електронної пошти зберігається в межах сесії.

#### **Метод**

* **Collect (Зібрати)** – Користувач вводить свою адресу електронної пошти, і вона зберігається в сесії без перевірки.
* **Verify (Перевірити)** – Користувач вводить свою адресу електронної пошти, і надсилається **код підтвердження**. Адреса електронної пошти зберігається лише після успішного підтвердження коду верифікації.

***

### Geolocation (Геолокація)

**Призначення:** Крок Geolocation збирає та перевіряє фізичне місцезнаходження користувача під час процесу верифікації. Це допомагає забезпечити відповідність вимогам юрисдикції, AML чи KYC.

***

### **SSN verification (Перевірка SSN)**

**Призначення:** Крок SSN verification перевіряє **номер соціального страхування (Social Security Number)** користувача як частину процесу ідентифікації.

***

### AnyDoc reader

**Призначення:** Крок AnyDoc дозволяє **витягувати структуровані дані з документів будь-якого типу** за допомогою ШІ — таких як розрахункові листки, банківські виписки, рахунки за комунальні послуги чи податкові довідки. Ви визначаєте поля, які потрібно витягнути, а система автоматично зчитує, перевіряє та позначає дані. На відміну від Proof of Address, який підтримує фіксований набір заздалегідь визначених типів документів, AnyDoc повністю настроюваний для кожного документа, що робить його придатним для специфічних для клієнта чи нестандартних типів документів.

#### **Параметри кроку**

**Тип документа**

* Довільна текстова мітка, що ідентифікує запитуваний документ (наприклад, «Розрахунковий листок», «Банківська виписка», «Податкова декларація»).
* Відображається в деталях сесії та виводі API.
* **Обов'язково.**

**Дозволені формати**

* Обмежує завантаження до **PDF**, **зображення** або обох типів.
* Має бути обрано принаймні один.

**Конфігурація сторінок**

* Визначає, чи очікується, що документ буде **однією сторінкою**, чи **декількома сторінками**.
* Якщо обрано **Декілька сторінок**, ви можете за бажанням вказати точну очікувану кількість сторінок. Якщо залишити порожнім, обробляються всі завантажені сторінки незалежно від їх кількості. Максимальна кількість сторінок за замовчуванням становить **10.**

**Підказка для витягування**

* Необов'язковий довільний текстовий контекст про документ загалом, наданий ШІ для покращення точності витягування (наприклад, особливості макета, конвенції форматування).
* Рекомендується писати англійською мовою для найкращої точності, незалежно від фактичної мови документа.

**Перевірка чинності документа**

* Коли увімкнено, відхиляє або позначає документи, старіші за налаштований вік, на основі дати, витягнутої з документа.
* Вимагає обрання **поля дати (Date field)** (має бути полем типу «Дата», налаштованим нижче) та **максимального віку документа** (число плюс одиниця виміру: Дні, Тижні, Місяці або Роки).

**Мова документа**

* Необов'язково. Вказує очікувану мову документа, щоб керувати процесом витягування.
* Якщо залишити порожнім, мова визначається автоматично.
* Використовується лише для інформування ШІ — ніколи не показується кінцевому користувачеві.

**Поріг достовірності**

* Бал від 0 до 100, нижче якого витягнуте поле позначається для ручного перегляду.
* Застосовується до всіх полів за замовчуванням (80), але може бути перевизначений для кожного поля окремо.

**Ліміт повторних спроб**

* Максимальна кількість разів, коли користувач може повторно завантажити або переспіймати документ на цьому кроці.
* Кожна спроба використовує один кредит обробки ШІ, тому це налаштовується для кожного кроку окремо для контролю використання.

#### **Конфігурація полів**

Кожен тип документа може мати одне або декілька полів, визначених для витягування. Для кожного поля ви можете налаштувати:

**Тип поля**

* Визначає, як перевіряється та форматується витягнуте значення.
* Опції: Текст, Число, Дата, Так/Ні, Email, Номер телефону, Валюта, Гроші/Сума, Податковий ID/Реєстраційний номер, Адреса, Відсоток, Інше.
* Якщо обрано **Інше**, ви можете за бажанням вказати, який тип даних містить поле — якщо залишити порожнім, воно розглядається як вільний текст без специфічної перевірки.

**Мітка поля**

* Назва поля, яка допомагає ШІ ідентифікувати його в документі та показується під час перегляду.
* Необов'язкова, якщо натомість надано підказку для витягування.

**Альтернативні назви**

* Необов'язковий список через кому інших термінів, під якими це поле може з'являтися в документі (наприклад, «Стать, Чоловіча/Жіноча» для поля Гендер).
* Використовується лише для покращення точності витягування — ніде не показується під час перегляду чи у виводі.

**Ключ поля**

* Унікальний ідентифікатор, який використовується для посилання на це поле у виводі API.
* Обов'язково, і має бути унікальним у межах кроку.

**Підказка для витягування**

* Необов'язкові вказівки, які повідомляють ШІ, як знайти та інтерпретувати це конкретне поле.
* Рекомендується писати англійською мовою для найкращої точності, незалежно від мови документа.
* Для кожного поля має бути надано принаймні одне з двох: мітку поля або підказку для витягування.

**Перевизначення порогу достовірності**

* Необов'язково. Перевизначає поріг достовірності на рівні кроку лише для цього конкретного поля.

**Обов'язкове**

* Перемикач. Якщо увімкнено, сесія позначається, коли це поле не може бути витягнуте з документа.

***


# Кроки KYB

Розуміння кроків для конфігурації KYB на другій вкладці безкодового конструктора

Вкладка кроків конфігурації KYB дозволяє проєктувати та налаштовувати ваш робочий процес KYB, додаючи, впорядковуючи та конфігуруючи різні кроки. Ця вкладка складається з трьох основних розділів:

## Огляд

1. **Доступні кроки (лівий панель)**
   * Цей розділ містить усі кроки верифікації, які ви можете включити у ваш робочий процес.
   * Кроки можуть включати Language, User questionnaire, Company data та Beneficiaries.
   * **Натисніть на кроки** у лівому розділі, щоб налаштувати процес KYB.
2. **Конструктор кроків (середня панель)**
   * Відображає **поточні кроки** у вашому потоці верифікації.
   * Ви можете **змінювати порядок** кроків, перетягуючи їх, щоб змінити послідовність виконання.
   * Непотрібні кроки можна **видалити**, якщо вони більше не потрібні.
3. **Налаштування кроку (права панель)**
   * Коли крок обрано, його параметри з'являються в цій панелі.
   * Ви можете **налаштувати параметри**, такі як вибір полів даних компанії.
   * Розширені налаштування (наприклад, ключі кроків) також можна керувати тут.

## Налаштування кроку

Панель налаштувань кроку дозволяє точно налаштувати кожен крок, коригуючи його специфічні параметри відповідно до потреб вашого бізнесу та вимог відповідності. Коли крок обрано, ця панель надає опції конфігурації.

**Заголовки кроків з'являються у двох місцях:** на індикаторі прогресу, показаному користувачам, які відновлюють потік на мобільному пристрої чи комп'ютері, та у вікні оператора під час відеодзвінка, де вони використовуються для ручного запуску кроків.

### **Заголовки кроків**

* **Призначення**: Заголовки кроків використовуються для відображення в різних контекстах:
  * Відображається як основний заголовок з боку користувача.
  * Коли користувач переходить на мобільний пристрій, екран комп'ютера показує поточний крок, на якому він перебуває.
* **Порада**: Обирайте чіткі та описові заголовки кроків, щоб покращити досвід користувача та допомогти операторам ефективно орієнтуватися в процесі.

### Вкладка Advanced

Вкладка **Advanced** зберігає всі необхідні ключі для кроків, запитань та відповідей, щоб полегшити інтеграцію із зовнішніми системами. Ці ключі можна використовувати для інтеграцій API або інших зовнішніх застосунків, що взаємодіють із потоком верифікації.

**Призначення**

* **Ключі кроків** – Унікальні ідентифікатори для кожного кроку верифікації.
* **Ключі запитань** – Ідентифікатори для конкретних запитань у формах чи опитувальниках.
* **Ключі відповідей** – Відповідні ключі для відповідей, наданих користувачами в кроках-опитувальниках.

Ці ключі забезпечують безперешкодну інтеграцію з іншими системами та полегшують відстеження й звітність даних.

***

## Кроки

### Мова (Language)

* **Призначення**: Крок Мова дозволяє користувачам обрати бажану мову інтерфейсу з випадаючого списку перед продовженням верифікації.
* **Позиціювання**: Цей крок **завжди розташований першим** у робочому процесі.
* **Параметри кроку**:
  * Визначте список **доступних мов**, з яких користувачі можуть обирати.
  * Ви маєте обрати щонайменше **дві мови**, щоб увімкнути випадаючий список вибору.
* **Порада**: Якщо ваші користувачі переважно розмовляють певною мовою, розгляньте можливість встановлення **мови за замовчуванням** у загальних налаштуваннях, при цьому все ще пропонуючи альтернативні варіанти для доступності.

***

### User questionnaire (Опитувальник користувача)

**Призначення:** Крок User questionnaire призначений для збору структурованих даних від користувача через різні типи форм. Надана інформація безпечно зберігається в межах сесії верифікації. Кроки-опитувальники пропонують широкий спектр настроюваних форматів запитань.

#### Деталі опитувальника

* **Заголовок** – Основний заголовок опитувальника.
* **Опис** – Короткий текст, що відображається під заголовком для надання контексту.
* **Текст кнопки успіху** – Настроюваний текст для кнопки підтвердження.

#### Запитання та відповіді

Identomat підтримує різні типи запитань, кожен з яких пропонує настроювані параметри:

#### Коротка відповідь (Short answer)

Користувачі можуть ввести відповідь на відкрите запитання.

* **Заголовок запитання** – Мітка для запитання.
* **Формат відповіді** - Визначає очікувану структуру відповіді користувача. Це налаштування контролює, як перевіряється введення та який тип даних приймає система.
  * **Вільний текст (Free text)** - Користувачі можуть вводити будь-який текст без обмежень.
  * **Email -** Користувачі мають ввести дійсну адресу електронної пошти; система забезпечує перевірку формату email.
* **Попередньо заповнена відповідь** – Попередньо заповнена відповідь, яку користувач може редагувати.
* **Обов'язкове** – Визначає, чи потрібно відповісти на запитання.
* **Режим лише читання** – Забороняє користувачам редагувати відповідь за замовчуванням.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### Прапорці (Checkbox — множинний вибір)

Користувачі можуть обрати один або декілька заздалегідь визначених варіантів.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо позначені варіанти, які користувачі можуть змінити.
* **Обов'язкове** – Визначає, чи має бути обраний принаймні один варіант.
* **Режим лише читання** – Забороняє користувачам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте декілька варіантів для вибору.

#### Перемикач (Radio — одиничний вибір)

Користувачі можуть обрати лише один варіант із заздалегідь визначеного списку.

* **Заголовок запитання** – Мітка для запитання.
* **Відповідь за замовчуванням** – Попередньо обраний варіант, який користувачі можуть змінити.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим.
* **Режим лише читання** – Забороняє користувачам змінювати вибір.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.
* **`+ Add option`** – Визначте доступні варіанти.

#### **Завантаження файлу (File upload)**

Користувачі можуть завантажувати файли, такі як зображення чи PDF.

* **Заголовок запитання** – Мітка для запитання.
* **Опис** – Додаткові інструкції, що відображаються під заголовком.
* **Максимальна кількість файлів** – Обмежте кількість файлів, які можуть завантажити користувачі (макс.: 10).
* **Типи файлів** – Обмежте завантаження до **PDF**, **зображень** або обох типів.
* **Обов'язкове** – Визначає, чи є завантаження файлу обов'язковим.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Випадаючий список (Dropdown)**

Дозволяє користувачам обрати одне або декілька значень із заздалегідь визначеного випадаючого списку.

* **Заголовок запитання** – Мітка для запитання.
* **Опції випадаючого списку** – Визначте випадаючий список, надаючи варіанти у форматі через кому (наприклад, *Варіант 1, Варіант 2, Варіант 3*).
* **Множинний вибір** – Якщо увімкнено, користувачі можуть обрати декілька варіантів із випадаючого списку. Якщо вимкнено, користувачі можуть обрати лише один варіант.
* **Обов'язкове** – Визначає, чи є вибір обов'язковим.
* **Повідомлення про помилку** – Повідомлення, що відображається, якщо поле є обов'язковим, але вибір не зроблено.
* **Умова** – Запитання з'являється лише за умови виконання вказаної умови.

#### **Вкладення (Attachment)**

Дозволяє користувачам отримувати доступ до файлів, які або завантажені операторами під час сесії, або попередньо прикріплені адміністраторами через безкодовий конструктор чи API.

* **Заголовок** – Мітка для запитання.
* **Опис** – Додаткові інструкції, що відображаються під заголовком.
* **Режим прикріплення файлу (Radio)** – Визначте, як файли надаються користувачеві:
  * **Завантажується оператором під час сесії** – Оператори можуть завантажувати файли під час сесії, які видимі користувачу.
    * **Дозволити зміни у вкладеннях після підтвердження користувача -** Якщо перемикач **вимкнено**, оператор не може редагувати вкладення після того, як користувач **підтвердив** опитувальник. Якщо **увімкнено**, оператор все ще може завантажувати або видаляти файли.
  * **Попередньо прикріплений файл** – Файли, завантажені заздалегідь через безкодові конфігурації або API.
* **Максимальна кількість файлів** – Обмежте кількість файлів, які можуть завантажити користувачі (макс.: 10).
* **Типи файлів (Checkbox)** – Обмежте завантаження до **PDF**, **зображень** або обох типів.
* **Умова** – Поле вкладення з'являється лише за умови виконання вказаної умови.

***

### Company data (Дані компанії)

**Призначення:** Крок Company data збирає основну інформацію про юридичну особу під час верифікації KYB. Ця інформація необхідна для підтвердження особи компанії та забезпечення відповідності регуляторним вимогам.

**Порада:** Завжди включайте обов'язкові поля, необхідні для юридичної відповідності. Використовуйте необов'язкові поля для збору додаткової інформації, корисної для бізнес- чи регуляторних цілей.

#### **Поля кроку**

* **Назва компанії** – Обов'язково; неможливо видалити.
* **Реєстраційний номер** – Обов'язково; неможливо видалити.
* **Країна реєстрації** – Обов'язково; неможливо видалити.

#### **Кнопка додавання поля**

Дозволяє адміністраторам включати додаткову інформацію про компанію у потік верифікації. Доступні поля включають:

* **ПДВ/Податковий ID**
* **Дата заснування**
* **Email**
* **Номер телефону**
* **Вебсайт**
* **Юридична адреса**
* **Тип юридичної особи компанії**

Кожне додане поле має перемикач для позначення його як **обов'язкового** чи необов'язкового.

***

### Beneficiaries (Бенефіціари)

**Призначення:** Крок Beneficiaries збирає детальну інформацію про ключових осіб та юридичних осіб компанії, таких як акціонери, кінцеві бенефіціарні власники (UBO), директори та представники. Це забезпечує відповідність регуляторним вимогам та дозволяє проводити верифікацію як для фізичних, так і для юридичних осіб.

**Порада:** Завжди налаштовуйте перемикачі верифікації та випадаючі списки KYC/KYB відповідно до ваших вимог відповідності. Обов'язкові поля неможливо видалити, але можна додати необов'язкові поля для збору додаткової інформації, яка може бути корисною для ваших внутрішніх процесів чи звітності.

#### **Деталі кроку**

* **Заголовок** – Основна мітка для кроку.
* **Опис** – Короткий опис призначення цього кроку.
* **Верифікація бенефіціарів** – Оберіть, як мають верифікуватися бенефіціари:
  * **Фізичні особи** – Проходять **потік KYC**.
  * **Юридичні особи** – Проходять **потік KYB** із використанням обраної конфігурації.
* **Випадаючий список KYC** – Оберіть **конфігурацію KYC** для використання при верифікації фізичних осіб.
* **Випадаючий список KYB** – Оберіть **конфігурацію KYB** для використання при верифікації компанії.
* <mark style="color:$primary;">**Кнопка**</mark><mark style="color:$primary;">**&#x20;**</mark><mark style="color:$primary;">**`+ Add beneficiary`**</mark> – Додає новий запис бенефіціара до кроку.

#### **Доступні ролі:**

**Акціонери (Shareholders)**

* **Перемикач верифікації** – Активується, коли у випадаючому списку обрано конфігурацію KYC або KYB.
* **Вкладки:** Фізична особа та Компанія

**Поля для фізичної особи** (обов'язкові, неможливо видалити)

* Ім'я
* Прізвище
* Дата народження

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Відсоток бенефіціарного володіння
* Номер телефону
* Email

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

**Поля для компанії** (обов'язкові, неможливо видалити)

* Назва компанії
* Реєстраційний номер
* Країна реєстрації

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Відсоток бенефіціарного володіння
* Вебсайт
* ПДВ/Податковий ID
* Дата заснування
* Email
* Номер телефону
* Юридична адреса

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

#### **UBO (Кінцеві бенефіціарні власники)**

* **Перемикач верифікації** – Активується, коли обрано конфігурацію KYC.

**Поля** (обов'язкові, неможливо видалити)

* Ім'я
* Прізвище
* Дата народження

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Відсоток бенефіціарного володіння
* Номер телефону
* Email

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

#### **Директори (Directors)**

* **Перемикач верифікації** – Активується, коли обрано конфігурацію KYC.

**Поля** (обов'язкові, неможливо видалити)

* Ім'я
* Прізвище
* Дата народження

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Номер телефону
* Email

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

#### **Представники (Representatives)**

* **Перемикач верифікації** – Активується, коли обрано конфігурацію KYC.

**Поля** (обов'язкові, неможливо видалити)

* Ім'я
* Прізвище
* Дата народження

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Номер телефону
* Email

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

#### **Інше (Other)**

* **Перемикач верифікації** – Активується, коли обрано конфігурацію KYC.

**Поля** (обов'язкові, неможливо видалити)

* Посада
* Ім'я
* Прізвище
* Дата народження

**Кнопка додавання поля** – Додаткові необов'язкові поля:

* Номер телефону
* Email

Кожне додане поле можна позначити як **обов'язкове** чи необов'язкове.

***


# Посібник для розробників

Посібник для розробників надає вичерпні інструкції та найкращі практики для інтеграції з нашою платформою.

[Identomat](https://www.identomat.com/) — це сервіс, розроблений для перевірки **особи людини** та **живості** через Інтернет. Цей посібник передбачає, що інтегруюча організація (далі — *«компанія»*) має вебсервер (далі — *«сервер компанії»*) за адресою `example.com`.

### Передумови

Перед інтеграцією компанія має отримати `company_key` — облікові дані, що використовуються для безпечної комунікації між сервером компанії та сервером Identomat (`widget.identomat.com`).

{% hint style="info" %}
Ще немає `company_key`? Дивіться [**Доступ до API**](/identomat-documentation-ukr/pochatok-roboti/dostup-do-api), щоб дізнатися, як згенерувати його з вашої панелі керування Identomat.
{% endhint %}

**Необов'язкові функції безпеки, що налаштовуються під час генерації ключа або в будь-який час пізніше:**

* **HMAC-авторизація** — `secret_key` використовується для генерації та перевірки HMAC-підписів, додаючи додатковий рівень верифікації для запитів, надісланих із вашим `company_key`.
* **Білий список IP-адрес** — Обмежте `company_key` конкретним набором IP-адрес. Після додавання IP-адрес приймаються лише запити з цим ключем із адреси, що входить до білого списку; запити з будь-якої іншої IP-адреси відхиляються. Якщо список залишити порожнім, ключ можна використовувати з будь-якої IP-адреси. Обидва налаштування можна додавати, редагувати чи видаляти в будь-який час у тому ж розділі вашої панелі керування, де було згенеровано ключ.

Для підвищення безпеки компанії можуть за бажанням реалізувати **HMAC-авторизацію**. У цьому випадку `secret_key` використовується для генерації та перевірки HMAC-підписів для безпечної комунікації.

## Процедура

Процедура інтеграції складається з трьох основних кроків:

{% stepper %}
{% step %}
[**Отримання `session_token`.**](#otrimannya-tokena-sesiyi)
{% endstep %}

{% step %}
[**Перенаправлення браузера користувача на `widget.identomat.com`.**](#perenapravlennya-na-vidzhet-identomat)
{% endstep %}

{% step %}
[**Перевірка результату.**](#perevirka-rezultatu)
{% endstep %}
{% endstepper %}

### **Отримання токена сесії**

Щоб отримати `session_token`, ваш бекенд має надіслати запит до ендпоінту `/begin/` із такими параметрами:

* `company_key` – Ваш унікальний ідентифікатор компанії.
* `flags` – Об'єкт JSON, що визначає глобальні налаштування для сесії верифікації.
* `steps` – Масив, що вказує кроки, які потрібно включити у потік верифікації. Кожен крок може мати власні прапорці (flags), специфічні для цього кроку.

> ⚠️ `session_token` дійсний протягом **15 хвилин** за замовчуванням.

**Ендпоінт:**

```nginx
POST https://widget.identomat.com/begin/
```

Запити можна надсилати як:

* **Параметри URL-запиту**
* **Дані форми, закодовані в URL**
* **Об'єкт JSON** у тілі запиту (рекомендовано)

#### **Структура Steps та Flags**

* `flags`: Визначає глобальну поведінку для всієї сесії.
* `steps`: Дозволяє повний контроль над процесом верифікації, надаючи можливість вказати **які кроки включити** (наприклад, `liveness`, `identity-document`) та налаштувати **прапорці, специфічні для кроку**, такі як `"allow_face_upload": true` для кроку `liveness`.

{% hint style="info" %}
Щоб забезпечити сумісність між старим та новим методами, які мають працювати разом, вам слід використовувати прапорці `'skip_face'` та `'skip_document'` при використанні steps.

Ці прапорці запобігають дублюванню кроків 'identity-document' та 'liveness', якщо вони вже існують у потоці.
{% endhint %}

**Використання конфігурації або власних кроків**

Ви можете ініціювати сесію двома способами:

* **Через попередньо визначену конфігурацію (рекомендовано):**
  * Ми наполегливо рекомендуємо використовувати **попередньо визначені конфігурації** через параметр `config_id`. Конфігурації забезпечують узгодженість, спрощують інтеграцію та зменшують ризик помилок. Використання конфігурацій також дозволяє нам у майбутньому припинити підтримку застарілої обробки власних кроків, допомагаючи клієнтам підтримувати чисту та стабільну інтеграцію.
* **Через власні кроки та прапорці**:\
  Використовуйте власні кроки та прапорці лише якщо у вас є дуже специфічні потреби, які неможливо задовольнити за допомогою конфігурацій. Із часом ми рекомендуємо переносити всі власні потоки на конфігурації.

{% hint style="warning" %}
**Чому конфігурації важливі:**

* **Спрощує створення сесії** — не потрібно вручну визначати кроки та прапорці.
* **Зменшує ризик помилок** у потоці верифікації.
* **Захищено від застарівання** — застаріла обробка власних кроків з часом буде припинена.
* Дозволяє Identomat ефективно **підтримувати**, **покращувати** та **оптимізувати потоки**.
* Полегшує **інтеграцію**.
  {% endhint %}

{% hint style="info" %}
📘 Для детальних визначень параметрів та прикладів див. [**Довідник API.**](/identomat-documentation-ukr/dovidnik-api)
{% endhint %}

### Перенаправлення на віджет Identomat

Щоб розпочати сесію верифікації, сервер компанії має перенаправити браузер користувача на:

```
https://widget.identomat.com/?session_token={session_token_here}
```

Замініть `{session_token_here}` на фактичний токен, отриманий від ендпоінту `/begin/`.

### Вбудовування в Iframe

Альтернативно, віджет можна вбудувати в iframe:

```html
<iframe
    height=“100dvh”
    width=“100%”
    src="https://widget.identomat.com/?session_token={session_token_here}"
    allow="camera">
</iframe>
```

{% hint style="warning" %}
Атрибут `allow="camera"` є обов'язковим для надання доступу до камери. Без нього кроки верифікації, що залежать від камери, не працюватимуть.
{% endhint %}

### **Перевірка результату**

Після завершення процесу верифікації результат можна визначити двома способами, залежно від того, як було інтегровано віджет:

* **Якщо використовується перенаправлення**\
  Якщо ви використовували підхід із перенаправленням (не вбудований в iframe), користувача буде перенаправлено на `return_url`, вказаний у налаштуваннях конфігурації чи прапорцях сесії, із доданим параметром запиту `session_token`.

```
https://yourapp.com/?session_token=abc123xyz
```

* **Якщо вбудовано в iframe**, завершення процесу можна визначити за допомогою JavaScript:

```javascript
addEventListener('message', function (e) {
    if (e.origin !== 'https://widget.identomat.com') return;
    if (e.data !== 'DONE') return;
    // Process completed, handle results here
});
```

{% hint style="success" %}
Обов'язково перевіряйте `origin` повідомлення, щоб уникнути ризиків безпеки.
{% endhint %}

***

## Швидкі посилання

Отримайте доступ до детальних посібників для розробників щодо потоків **KYC (Know Your Customer)** та **KYB (Know Your Business)**. Натисніть на картку нижче, щоб дослідити конфігурацію, кроки інтеграції та найкращі практики для кожного типу верифікації.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>KYC (Know Your Customer)</strong><br><br>Дізнайтеся, як збирати та перевіряти дані окремих користувачів, налаштовувати кроки верифікації та інтегрувати потоки KYC.</td><td></td></tr><tr><td><p><strong>KYB (Know Your Business)</strong></p><p><br>Дізнайтеся, як збирати та перевіряти дані компанії, бенефіціарів та представників, за допомогою настроюваних кроків верифікації.</p></td><td></td></tr></tbody></table>


# KYC (Know Your Customer)

Потік KYC перевіряє особу окремих користувачів за допомогою перевірки документів, виявлення живості та автоматизованої перевірки даних.

Кожен потік верифікації KYC складається з налаштовуваних кроків, які визначають, як перевіряється особа кінцевого користувача. Прапорці та кроки, перелічені нижче, визначають, які перевірки включені в процес та як вони виконуються.

## Flags (Прапорці)

Параметр `flags` — це об'єкт із необов'язковими прапорцями конфігурації, які налаштовують потік верифікації KYC. Нижче наведено огляд найпоширеніших прапорців:

<table data-full-width="true"><thead><tr><th width="218">Назва прапорця</th><th width="437">Опис</th><th width="216">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>skip_face</code></td><td>Пропускає крок <code>liveness</code>, якщо він вже існує у визначених кроках. Запобігає дублюванню при використанні власних потоків.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>skip_document</code></td><td>Пропускає крок <code>identity-document</code>, якщо він вже існує у визначених кроках. Запобігає дублюванню при використанні власних потоків.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>return_url</code></td><td>URL для перенаправлення користувача після завершення процесу ідентифікації. Якщо не вказано, вважається, що сесія вбудована в iframe.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>language</code></td><td><p>Код мови інтерфейсу користувача. Підтримувані значення:</p><pre data-overflow="wrap"><code>"es", "ka", "uk", "ru", "uz", "it", "gr", "tr", "ro", "ar", "de", "pl", "hi", "bn", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td><code>"en"</code></td><td>&#x3C;string></td></tr><tr><td><code>skip_desktop</code></td><td>Обмежує сесії лише мобільними пристроями. Якщо ініційовано на комп'ютері, відображається QR-код для перенесення сесії на мобільний пристрій.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>switch_device_url</code></td><td>Користувацький URL для відображення в QR-коді, якщо камера недоступна або заблокована. Якщо URL не вказано або поле залишено порожнім, QR-код не відображатиметься.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>restrict_url_sharing</code></td><td>Забороняє використання URL-адреси сесії в іншому браузері або на іншому пристрої. Якщо встановлено  <code>true</code>, QR-код не відображатиметься, коли доступ до камери заборонено, якщо не вказано <code>switch_device_url</code>.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>requiredHdMedia</code></td><td>Вимагає використання камери Full HD (1080p+) для кроків <code>liveness</code> та <code>identity-document</code>. Якщо не виконано, показується QR-код для переходу користувача на інший пристрій.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

## Steps (Кроки)

Масив `steps` визначає послідовність та структуру процесу ідентифікації. Він включається разом із параметрами `company_key` та `flags` при створенні сесії.

Кожен крок у масиві `steps` може містити такі властивості:

<table><thead><tr><th width="163.91015625">Властивість</th><th>Опис</th></tr></thead><tbody><tr><td><code>type</code></td><td>Тип конкретного кроку (див. список підтримуваних типів кроків нижче).</td></tr><tr><td><code>key</code></td><td>Унікальний ідентифікатор кроку. Цей ключ можна налаштувати, але він має залишатися унікальним у межах сесії.</td></tr><tr><td><code>flags</code></td><td>Прапорці конфігурації, специфічні для кроку, які контролюють поведінку цього кроку.</td></tr><tr><td><code>title</code></td><td>Користувацький заголовок, наданий клієнтом, що відображається користувачеві під час цього кроку в інтерфейсі.</td></tr></tbody></table>

### **Підтримувані типи кроків**

Нижче наведено список усіх типів кроків, наразі підтримуваних системою:

* [Language (Мова)](#language-mova)
* [ID verification (Верифікація документа)](#identity-document-verification-verifikaciya-dokumenta-sho-posvidchuye-osobu)
* [Liveness check (Перевірка живості)](#liveness-check-perevirka-zhivosti)
* [Proof of Address (Підтвердження адреси)](#proof-of-address-pidtverdzhennya-adresi)
* [Selfie with ID (Селфі з документом)](#selfie-with-id-selfi-z-dokumentom)
* [Video call (Відеодзвінок)](#video-call-videodzvinok)
* [Phone number verification (Верифікація номера телефону)](#phone-number-nomer-telefonu)
* [Email verification (Верифікація email)](#email)
* [Geolocation (Геолокація)](#geolocation-geolokaciya)
* [AnyDoc reader ](#anydoc-reader)
* [SSN verification (Перевірка SSN)](#ssn-verification-perevirka-ssn)
* [User questionnaire (Опитувальник користувача)](#user-questionnaire-opituvalnik-koristuvacha)
* [Operator questionnaire (Опитувальник оператора)](#operator-questionnaire-opituvalnik-operatora)

***

### Language (Мова)

Крок **Language** дозволяє користувачеві обрати бажану мову інтерфейсу на початку процесу ідентифікації.

**Конфігурації кроку Language:**

* **Заголовок:** `Language`
* **Тип**: `language`
* **Ключ**: `language`
* **Масив** `languages`

<table data-full-width="true"><thead><tr><th width="136.875">Прапорець</th><th width="409.54296875">Опис</th><th width="173.984375">За замовчуванням</th><th width="131.734375">Тип</th></tr></thead><tbody><tr><td><code>languages</code></td><td><p>Масив кодів мов для відображення. Якщо залишити порожнім, показуються всі підтримувані мови.</p><pre data-overflow="wrap"><code>"en", "ka", "es", "uk", "gr", "it", "de", "ru", "uz", "ro", "tr", "ar", "pl", "bn", "hi", "hy", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td>Усі</td><td>Array&#x3C;string></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
                "title": {
                  "en": "Language",
                  "ka": "ენა",
                  "es": "Idioma",
                  "uk": "Мова",
                  "gr": "Γλώσσα",
                  "it": "Lingua",
                  "de": "Sprache",
                  "ru": "Язык",
                  "uz": "Til",
                  "ro": "Limbă",
                  "tr": "Dil",
                  "ar": "اللغة",
                  "pl": "Język",
                  "bn": "ভাষা",
                  "hi": "भाषा",
                  "hy": "Լեզու",
                  "az": "Dil",
                  "ja": "言語",
                  "pt": "Idioma",
                  "fr": "Langue",
                  "kk": "Тіл",
                  "sv": "Språk"
                },
                "type": "language",
                "key": "language",
                "languages": [
                    "en",
                    "ka",
                    "es",
                    "uk",
                    "gr",
                    "it",
                    "de",
                    "ru",
                    "uz",
                    "ro",
                    "tr",
                    "ar",
                    "pl",
                    "bn",
                    "hi",
                    "hy",
                    "az",
                    "ja",
                    "pt",
                    "fr",
                    "kk",
                    "sv"
                ]
            },
            {
                "title": {
                  "en": "ID verification",
                  "ka": "პირადობის დადასტურება",
                  "es": "Verificación de identidad",
                  "uk": "Підтвердження особи",
                  "gr": "Επαλήθευση ταυτότητας",
                  "it": "Verifica dell identità",
                  "de": "Identitätsprüfung",
                  "ru": "Проверка удостоверения личности",
                  "uz": "Shaxsni tasdiqlash",
                  "ro": "Verificare a identității",
                  "tr": "Kimlik doğrulama",
                  "ar": "التحقق من الهوية",
                  "pl": "Weryfikacja tożsamości",
                  "bn": "পরিচয় যাচাই",
                  "hi": "पहचान सत्यापन",
                  "hy": "Անձնագրի հաստատում",
                  "az": "Şəxsiyyətin təsdiqi",
                  "ja": "本人確認",
                  "pt": "Verificação de identidade",
                  "fr": "Vérification d identité",
                  "kk": "Жеке басын тексеру",
                  "sv": "ID-verifiering"
            },
                "type": "identity-document",
                "key": "select_document_id-1",
                "flags": {
                    "document_types": [
                        "id",
                        "passport",
                        "driver_license",
                        "residence_license"
                    ],
                    "allow_document_upload": false,
                    "disable_document_capture": false
                }
            }
    ]
}'
```

</details>

***

### Identity document verification (Верифікація документа, що посвідчує особу)

Крок Identity Document передбачає, що користувачі сканують або завантажують фото своїх документів, що посвідчують особу.

**Конфігурації кроку Identity document:**

* **Заголовок:** `ID verification`
* **Тип**: `identity-document`
* **Ключ**: `identity-document`
* **Прапорці:**
  * disable\_document\_capture
  * allow\_document\_upload
  * document\_types
  * document\_countries

<table data-full-width="true"><thead><tr><th width="234.47265625">Прапорець</th><th width="419.66796875">Опис</th><th width="155.9609375">За замовчуванням</th><th width="149.3515625">Тип</th></tr></thead><tbody><tr><td><code>disable_document_capture</code></td><td>Вимикає живе сканування документа. Користувачі можуть лише завантажувати зображення своїх документів.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_document_upload</code></td><td>Вмикає опцію сканувати або завантажувати документ.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_nfc_capture</code><br><br></td><td>Вмикає зчитування NFC-чипа для підтримуваних документів, що посвідчують особу (наприклад, біометричні паспорти та ID-картки).<br>Коли увімкнено, користувачі можуть сканувати NFC-чип документа за допомогою сумісного пристрою.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>document_types</code></td><td><p>Список дозволених типів документів.<br></p><p>Можливі значення:</p><pre data-overflow="wrap"><code>"id", "passport", "driver_license", "residence_license"
</code></pre></td><td>Усі типи</td><td>Array&#x3C;string></td></tr><tr><td><code>document_countries</code></td><td>Обмежує прийнятних видавців документів конкретними кодами країн (наприклад, <code>"USA", "DEU", "ITA"</code>).</td><td>Без обмежень</td><td>Array&#x3C;string></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Дозволяє користувачам за бажанням перейти на інший пристрій, щоб продовжити сесію.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком верифікації **`identity-document`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
            "title": {
                "es": "ID verification"
            },
            "type": "identity-document",
            "key": "select_document_id",
            "flags": {
                "allow_document_upload": true,
                "document_types": [
                    "id",
                    "passport",
                    "driver_license",
                    "residence_license"
                ]
            }
        }
    ]
}'
```

</details>

**Перевірка даних документа (Document data review)**

Коли увімкнено, користувачам показується сторінка перегляду після сканування документа, де вони можуть перевірити та виправити витягнуті дані перед подачею.

Щоб увімкнути перевірку даних документа, додайте об'єкт `review` до конфігурації кроку:

<table><thead><tr><th width="139.65234375">Прапорець</th><th width="352.6171875">Опис</th><th width="157.6640625">За замовчуванням</th><th width="158.55078125">Тип</th></tr></thead><tbody><tr><td><code>check</code></td><td>Вмикає сторінку перевірки даних документа.</td><td><code>false</code></td><td><code>&#x3C;boolean></code></td></tr><tr><td><code>allowedUsers</code></td><td>Визначає, хто може редагувати витягнуті дані на сторінці перегляду.<br>Можливі значення: <code>"client"</code> (кінцевий користувач, що проходить верифікацію), <code>"operator"</code> (оператор, який контролює сесію).</td><td>—</td><td><code>Array&#x3C;string></code></td></tr><tr><td><code>fields</code></td><td>Карта OCR-полів для включення на сторінку перегляду. Кожне поле можна налаштувати властивостями <code>editable</code> та <code>mandatory</code>.</td><td>—</td><td><code>Object</code></td></tr></tbody></table>

**Властивості конфігурації поля:**

<table><thead><tr><th width="120.27734375">Прапорець</th><th width="461.484375">Опис</th><th>Тип</th></tr></thead><tbody><tr><td><code>type</code></td><td>Тип даних поля. Можливі значення: <code>"string"</code>, <code>"datestring"</code></td><td><code>&#x3C;string></code></td></tr><tr><td><code>editable</code></td><td>Чи може користувач або оператор редагувати це поле.</td><td><code>&#x3C;boolean></code></td></tr><tr><td><code>mandatory</code></td><td>Чи має поле бути заповненим перед подачею.</td><td><code>&#x3C;boolean></code></td></tr></tbody></table>

**Настроювані поля:**

| Поле                         | Ключ                   | Компонент        |
| ---------------------------- | ---------------------- | ---------------- |
| Ім'я (англ.)                 | `firstNameEn`          | Текстове поле    |
| Ім'я (місцевою мовою)        | `firstNameLocal`       | Текстове поле    |
| По батькові (англ.)          | `middleNameEn`         | Текстове поле    |
| По батькові (місцевою мовою) | `middleNameLocal`      | Текстове поле    |
| Прізвище (англ.)             | `lastNameEn`           | Текстове поле    |
| Прізвище (місцевою мовою)    | `lastNameLocal`        | Текстове поле    |
| Ім'я батька (англ.)          | `fatherNameEn`         | Текстове поле    |
| Ім'я батька (місцевою мовою) | `fatherNameLocal`      | Текстове поле    |
| Дата народження              | `dateOfBirth`          | Вибір дати       |
| Місце народження             | `placeOfBirth`         | Текстове поле    |
| Стать                        | `sex`                  | Перемикач        |
| Громадянство                 | `citizenship`          | Список країн     |
| Національність               | `nationality`          | Список країн     |
| Номер документа              | `documentNumber`       | Текстове поле    |
| Орган видачі                 | `authority`            | Текстове поле    |
| Термін дії документа         | `documentExpireDate`   | Вибір дати       |
| Дата видачі документа        | `documentIssuingDate`  | Вибір дати       |
| Країна видачі документа      | `documentIssuingState` | Список країн     |
| Особистий номер              | `personalNumber`       | Текстове поле    |
| Адреса                       | `address`              | Текстова область |
| Область/штат                 | `state`                | Текстове поле    |

**Ієрархія довіри джерела**

Поля, заповнені з довіреного джерела, є доступними **лише для читання**, незалежно від конфігурації `editable`. Це правило застосовується на рівні бекенду і не може бути перевизначене.

Наступні джерела створюють поля, недоступні для редагування:

* `NFC`
* `MRZ`
* `QR`

**Приклад конфігурації:**

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
{
  "type": "identity-document",
  "key": "select_document_id",
  "title": { "en": "ID verification" },
  "flags": {
    "document_types": ["id", "passport", "driver_license", "residence_license"],
    "allow_document_upload": true,
    "disable_document_capture": false
  },
  "review": {
    "check": true,
    "allowedUsers": ["client", "operator"],
    "fields": {
      "firstNameEn":          { "type": "string",     "editable": true, "mandatory": true },
      "firstNameLocal":       { "type": "string",     "editable": true, "mandatory": true },
      "middleNameEn":         { "type": "string",     "editable": true, "mandatory": true },
      "middleNameLocal":      { "type": "string",     "editable": true, "mandatory": true },
      "lastNameEn":           { "type": "string",     "editable": true, "mandatory": true },
      "lastNameLocal":        { "type": "string",     "editable": true, "mandatory": true },
      "fatherNameEn":         { "type": "string",     "editable": true, "mandatory": true },
      "fatherNameLocal":      { "type": "string",     "editable": true, "mandatory": true },
      "dateOfBirth":          { "type": "datestring", "editable": true, "mandatory": true },
      "placeOfBirth":         { "type": "string",     "editable": true, "mandatory": true },
      "sex":                  { "type": "string",     "editable": true, "mandatory": true },
      "citizenship":          { "type": "string",     "editable": true, "mandatory": true },
      "nationality":          { "type": "string",     "editable": true, "mandatory": true },
      "documentNumber":       { "type": "string",     "editable": true, "mandatory": true },
      "authority":            { "type": "string",     "editable": true, "mandatory": true },
      "documentExpireDate":   { "type": "datestring", "editable": true, "mandatory": true },
      "documentIssuingDate":  { "type": "datestring", "editable": true, "mandatory": true },
      "documentIssuingState": { "type": "string",     "editable": true, "mandatory": true },
      "personalNumber":       { "type": "string",     "editable": true, "mandatory": true },
      "address":              { "type": "string",     "editable": true, "mandatory": true },
      "state":                { "type": "string",     "editable": true, "mandatory": true }
    }
  }
}
```

</details>

***

### **Liveness check (Перевірка живості)**

Крок **Liveness** перевіряє, чи фізично присутній користувач, аналізуючи живе зображення обличчя або відео.

Identomat підтримує два типи перевірки живості:

* **Пасивна (Passive liveness):** Користувач вирівнює обличчя в межах овальної рамки, поки система знімає коротке (приблизно 2-секундне) відео.
* **Активна (Active liveness):** Користувач виконує конкретні дії, щоб підтвердити свою присутність як живої людини.

**Конфігурації кроку Liveness check:**

* **Заголовок:** `Liveness`
* **Тип**: `liveness`
* **Ключ**: `liveness`
* **Прапорці:**
  * liveness
  * allow\_face\_upload
  * adaptive\_liveness
  * instructions

<table data-full-width="true"><thead><tr><th width="215.96484375">Прапорець</th><th width="466.70703125">Опис</th><th width="158.09765625">За замовчуванням</th><th width="149.48046875">Тип</th></tr></thead><tbody><tr><td><code>liveness</code></td><td><p>Визначає тип перевірки живості:</p><ul><li><code>true</code>: активна живість</li><li><code>false</code>: пасивна живість</li></ul></td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>allow_face_upload</code></td><td><p>Дозволяє користувачеві завантажити селфі замість використання камери.</p><p><br>⚠️ <em>Цей прапорець ігнорується, якщо <code>liveness</code> дорівнює <code>true</code>, оскільки активні перевірки вимагають живого вводу.</em></p></td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Дозволяє користувачам за бажанням перейти на інший пристрій, щоб продовжити сесію.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>adaptive_liveness</code></td><td>(Лише SDK) Вмикає новий досвід <strong>Adaptive liveness</strong> із покращеним UI та виявленням. Має бути <code>true</code>, щоб використовувати Adaptive Liveness.<br>⚠️ Якщо <code>adaptive_liveness</code> дорівнює <code>true</code>, прапорець <code>liveness</code> <strong>має</strong> бути <code>false</code>.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>instructions</code></td><td>Визначає дії, які користувач має виконати для Adaptive Liveness.<br>Застосовується лише якщо <code>adaptive_liveness</code> дорівнює <code>true</code>.<br>Наразі підтримувана опція: <code>[ "smile" ]</code>.<br></td><td><code>[ "smile" ]</code></td><td>Array&#x3C;string></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`document_countries`** та **`language`** та кроками верифікації **`identity-document`** і *активної* **`liveness`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "language": "en"
    },
    "steps": [
        {
            "title": {
                "en": "ID verification"
                },
            "type": "identity-document",
            "key": "select_document_id",
            "flags": {
                "allow_document_upload": true,
                "document_types": [
                    "id",
                    "passport",
                    "driver_license",
                    "residence_license"
                ],
                "document_countries": [
                    "USA",
                    "FRA"
                ]
            }
        },
        {
            "title": {
                "en": "Liveness check"
                },
            "type": "liveness",
            "key": "liveness",
            "flags": {
                "liveness": true
            }
        }
    ]
}'
```

</details>

***

### Proof of Address (Підтвердження адреси)

Крок POA включає верифікацію Proof of Address та аналіз інших типів документів. Цей крок підтримує широкий спектр загальних типів документів, таких як рахунки за комунальні послуги чи банківські виписки.

**Конфігурації кроку Proof of Address:**

* **Заголовок:** `Proof of Address`
* **Тип**: `general-document`
* **Ключ**: `select_general_document`
* **Прапорці:**
  * general\_document\_types

<table data-full-width="true"><thead><tr><th width="224.64453125">Прапорець</th><th width="431.55859375">Опис</th><th width="172">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>general_document_types</code></td><td><p>Список дозволених типів документів.<br>Якщо не вказано або встановлено порожній масив, для завантаження будуть доступні всі типи документів.</p><p>Можливі значення:</p><pre data-overflow="wrap"><code>"bank_statement", "utility_bill", "yellow_slip", "drivers_license", "vehicle_registration_certificate"
</code></pre></td><td>Усі типи</td><td>&#x3C;array></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`optional_continue_on_another_device`** та **`language`** та кроками **`liveness`** і **`general-document`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "optional_continue_on_another_device": true,
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Liveness check"
            },
        "type": "liveness",
        "key": "liveness",
        "flags": {
            "liveness": true
        }
    },
    {
        "title": {
            "en": "Proof of address"
            },
        "type": "general-document",
        "key": "select_general_document",
        "flags": {
            "general_document_types": [
                "bank_statement",
                "utility_bill",
                "yellow_slip",
                "drivers_license",
                "vehicle_registration_certificate"
            ]
        }
    }
]
}'
```

</details>

***

### Selfie with ID (Селфі з документом)

У кроці Selfie with ID користувачам потрібно тримати документ у руках так, щоб було видно і обличчя, і документ.

**Конфігурації кроку Selfie with ID:**

* **Заголовок:** `Selfie with ID`
* **Тип**: `face-document`
* **Ключ**: `capture_face_document`
* **Прапорці:**
  * allow\_face\_doc\_upload
  * require\_face\_document

<table data-full-width="true"><thead><tr><th width="209.796875">Прапорець</th><th width="391.66796875">Опис</th><th width="172">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>allow_face_doc_upload</code></td><td>Дозволяє користувачам завантажити зображення себе з документом.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_face_document</code></td><td>Вимагає, щоб користувачі зробили живий знімок себе з документом.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>optional_continue_on_another_device</code></td><td>Дозволяє користувачам за бажанням перейти на інший пристрій, щоб продовжити сесію.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`restrict_url_sharing`** та **`language`** та кроком **`face-document`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Selfie with ID"
            },
        "type": "face-document",
        "key": "capture_face_document",
        "flags": {
            "allow_face_doc_upload": true,
            "require_face_document": true
        }
    }
]
}'
```

</details>

***

### Video call (Відеодзвінок)

У кроці Video call користувач з'єднується з оператором для живої верифікації. Це може включати будь-який із кроків верифікації Identomat.

Identomat пропонує два режими дзвінків:

* **Один на один:** Передбачає безпечний відеодзвінок між клієнтом та оператором верифікації
* **Багатокористувацький дзвінок:** Дозволяє верифікацію декількох клієнтів у межах однієї сесії. Кожен користувач може проходити свій власний налаштований робочий процес, адаптований до конкретного бізнес-процесу.

**Конфігурації кроку Video call:**

* **Заголовок:** `Video call`
* **Тип**: `video-call`
* **Ключ**: `video-call`
* **Масив** `steps`
* **resetSteps**: `true/false` *(необов'язково)*
* **hideCameraOption**: `true/false` *(необов'язково)*
* **nameRequired**\*:\* `true/false` *(необов'язково)*
* **multiple\_participants:** `true/false` *(необов'язково)*

<table data-full-width="true"><thead><tr><th width="211.5390625">Прапорець</th><th width="448">Опис</th><th width="172">За замовчуванням</th><th width="121" valign="middle">Тип</th></tr></thead><tbody><tr><td><code>steps</code></td><td>Список кроків для виконання під час відеодзвінка (крім <code>language</code> та <code>operator_questionnaire</code>).</td><td><code>[ ]</code></td><td valign="middle">&#x3C;array></td></tr><tr><td><code>resetSteps</code></td><td>Якщо true, дані верифікації користувача скидаються, коли він повторно приєднується до дзвінка.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>hideCameraOption</code></td><td>Увімкнення цього приховає іконку камери, забороняючи користувачам вимикати камеру.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>nameRequired</code></td><td>Вимагає, щоб користувачі ввели своє ім'я перед приєднанням.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr><tr><td><code>multiple_participants</code></td><td>Вмикає багатокористувацькі відеосесії.</td><td><code>false</code></td><td valign="middle">&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком **`video-call`** із кроком **`identity-document`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "es"
},
"steps": [
    {
            "type": "video-call",
            "title": {
                "es": "video-call"
                },
            "key": "video-call",
            "steps": [
                {
                    "title": {
                        "es": "ID verification"
                        },
                    "type": "identity-document",
                    "key": "select_document_id",
                    "flags": {
                        "document_types": [
                            "id",
                            "passport",
                            "driver_license",
                            "residence_license"
                        ]
                    }
                }
            ]
        }
]
}'
```

</details>

***

### Phone number (Номер телефону)

Верифікація номера телефону дозволяє користувачам перевіряти або надавати свій номер телефону.

Крок Phone number може включати:

* **Верифікацію** номера телефону користувача за допомогою коду OTP.
* **Збір** номера телефону користувача.

**Конфігурації кроку Phone number:**

* **Тип**: `phone-number`
* **Ключ**: `phone_number`
* **Прапорці:**
  * require\_phone\_number\_check
  * require\_phone\_number

<table data-full-width="true"><thead><tr><th width="252.58984375">Прапорець</th><th width="391.9375">Опис</th><th width="172">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>require_phone_number_check</code></td><td>Вимагає, щоб користувачі перевірили свій номер за допомогою коду OTP.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_phone_number</code></td><td>Вимагає, щоб користувачі надали номер телефону без перевірки.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком **`phone-number`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "it"
},
"steps": [
    {
        "title": {
            "it": "Phone number verification"
            },
        "type": "phone-number",
        "key": "phone_number",
        "flags": {
            "require_phone_number_check": true
        }
    }
]
}'
```

</details>

***

### Email

Крок Email дозволяє користувачам перевіряти або надавати свою адресу електронної пошти.

Крок Email може включати:

* **Верифікацію** email користувача за допомогою коду OTP.
* **Збір** email користувача.

**Конфігурації кроку Email:**

* **Тип**: `email`
* **Ключ**: `require_email`
* **Прапорці:**
  * require\_email\_check
  * require\_email

<table data-full-width="true"><thead><tr><th width="215">Прапорець</th><th width="360">Опис</th><th width="112">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>require_email_check</code></td><td>Вимагає верифікації email за допомогою коду OTP.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>require_email</code></td><td>Вимагає, щоб користувачі надали email без перевірки.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком **`email`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Email verification"
            },
        "type": "email",
        "key": "require_email",
        "flags": {
            "require_email_check": true
        }
    }
]
}'
```

</details>

***

### Geolocation (Геолокація)

Крок Geolocation запитує дані про місцезнаходження користувача, запитуючи дозвіл браузера.

**Конфігурації кроку Geolocation:**

* **Тип**: `geolocation`
* **Ключ**: `require_geolocation`
* **Прапорці:**
  * require\_geolocation

<table data-full-width="true"><thead><tr><th width="280">Прапорець</th><th width="448">Опис</th><th width="172">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>require_geolocation</code></td><td>Вимагає доступу до місцезнаходження для проходження кроку.</td><td><code>true</code></td><td>&#x3C;boolean></td></tr></tbody></table>

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком **`geolocation`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
"steps": [
    {
        "title": {
            "en": "Geolocation"
            },
        "type": "geolocation",
        "key": "require_geolocation",
        "flags": {
            "require_geolocation": true
        }
    }
]
}'
```

</details>

***

### **AnyDoc reader**

Крок AnyDoc дозволяє витягувати структуровані дані **з документів будь-якого типу** за допомогою ШІ — таких як розрахункові листки, банківські виписки, рахунки за комунальні послуги чи податкові довідки. Ви визначаєте поля, які потрібно витягнути, а система автоматично зчитує та перевіряє їх.

**Конфігурації кроку AnyDoc:**

* **Заголовок:** `AnyDoc upload`
* **Тип**: `anydoc-reader`
* **Ключ**: визначається клієнтом, має залишатися унікальним у межах сесії
* **Параметри:**
  * `documentType`
  * `allowedFormats`
  * `pageConfiguration`
  * `pageCount`
  * `documentValidity`
  * `language`
  * `extractionHint`
  * `confidenceThreshold`
  * `retryLimit`
  * `fields`

<table><thead><tr><th width="174.453125">Параметр</th><th width="434.16015625">Опис</th><th width="199.34375">За замовчуванням</th><th>Тип</th></tr></thead><tbody><tr><td><code>documentType</code></td><td>Довільна текстова мітка, що ідентифікує тип документа (наприклад, «Payslip», «Bank Statement»). Використовується внутрішньо в деталях сесії та виводі API. Обов'язково.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>allowedFormats</code></td><td>Формати файлів, прийняті для завантаження. Можливі значення: <code>"pdf"</code>, <code>"image"</code></td><td>Усі типи</td><td>Array&#x3C;string></td></tr><tr><td><code>pageConfiguration</code></td><td>Чи очікується, що документ буде однією чи декількома сторінками. Можливі значення: <code>"single"</code>, <code>"multiple"</code></td><td><code>"single"</code></td><td>&#x3C;string></td></tr><tr><td><code>pageCount</code></td><td>Очікувана кількість сторінок, використовується лише коли <code>pageConfiguration</code> дорівнює <code>"multiple"</code>. Якщо не вказано, обробляються всі завантажені сторінки.</td><td>null</td><td>&#x3C;number></td></tr><tr><td><code>documentValidity</code></td><td>Встановлює максимальний вік документа на основі поля дати, витягнутого з документа. Див. деталі нижче.</td><td><code>{ "enabled": false }</code></td><td>&#x3C;object></td></tr><tr><td><code>language</code></td><td>Очікувана мова документа, використовується для покращення точності витягування. Якщо не вказано, мова визначається автоматично.</td><td>Автовизначення</td><td>&#x3C;string></td></tr><tr><td><code>extractionHint</code></td><td>Додатковий контекст про документ загалом, наданий ШІ разом із підказками на рівні полів. Рекомендується англійською мовою незалежно від мови документа.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>confidenceThreshold</code></td><td>Мінімальний бал достовірності (0–100), необхідний для прийняття витягнутого поля без позначення. Застосовується до всіх полів, якщо не перевизначено для окремого поля.</td><td><code>80</code></td><td>&#x3C;number></td></tr><tr><td><code>retryLimit</code></td><td>Максимальна кількість разів, коли користувач може завантажити чи зняти документ на цьому кроці.</td><td><code>3</code></td><td>&#x3C;number></td></tr><tr><td><code>fields</code></td><td>Масив об'єктів полів, що визначають дані для витягування. Див. деталі нижче.</td><td>-</td><td>Array&#x3C;object></td></tr></tbody></table>

**Об'єкт `documentValidity`:**

<table><thead><tr><th width="128.01953125">Властивість</th><th width="535.7109375">Опис</th><th width="140.33984375">За замовчуванням</th><th>Тип</th></tr></thead><tbody><tr><td><code>enabled</code></td><td>Вмикає або вимикає перевірку чинності.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>dateField</code></td><td><code>key</code> поля (має бути типу <code>date</code>), витягнуте значення якого перевіряється проти <code>maxAge</code>. Обов'язково, коли <code>enabled</code> дорівнює <code>true</code>.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>maxAge</code></td><td>Максимальний дозволений вік документа, у вигляді пари <code>value</code> + <code>unit</code>. Можливі значення <code>unit</code>: <code>"days"</code>, <code>"weeks"</code>, <code>"months"</code>, <code>"years"</code>.</td><td>-</td><td>&#x3C;object></td></tr></tbody></table>

**Fields (Поля)**

Кожен об'єкт у масиві `fields` визначає окрему одиницю даних для витягування з документа.

<table><thead><tr><th width="147.1171875">Параметр</th><th width="462.48828125">Опис</th><th width="178.23828125">За замовчуванням</th><th>Тип</th></tr></thead><tbody><tr><td><code>key</code></td><td>Унікальний ідентифікатор поля в межах кроку. Використовується для посилання на витягнуте значення у виводі API. Обов'язково.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>type</code></td><td>Визначає, як перевіряється та форматується витягнуте значення. Можливі значення: <code>"text"</code>, <code>"number"</code>, <code>"date"</code>, <code>"boolean"</code>, <code>"email"</code>, <code>"phone"</code>, <code>"currency"</code>, <code>"money"</code>, <code>"iban"</code> <code>"taxId"</code>, <code>"address"</code>, <code>"percentage"</code>, <code>"other"</code></td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>otherTypeLabel</code></td><td>Довільний текстовий опис даних, які містить це поле. Використовується лише коли <code>type</code> дорівнює <code>"other"</code>; якщо залишити порожнім, ШІ розглядає поле як вільний текст без перевірки формату.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>label</code></td><td>Назва поля для відображення, використовується для ідентифікації в документі та показується в деталях сесії. Необов'язкова, якщо надано <code>extractionHint</code>.</td><td>-</td><td>&#x3C;string></td></tr><tr><td><code>alternativeNames</code></td><td>Альтернативні терміни через кому, під якими це поле може з'являтися в документі (наприклад, «Sex, Male/Female» для поля Gender). Використовується лише для інформування витягування, не показується в перегляді чи виводі API.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>mandatory</code></td><td>Чи позначається сесія, якщо це поле не може бути витягнуте.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>confidenceThreshold</code></td><td>Перевизначає поріг достовірності на рівні кроку для цього конкретного поля.</td><td>Успадковує значення за замовчуванням кроку</td><td>&#x3C;number></td></tr><tr><td><code>extractionHint</code></td><td>Додатковий контекст про це поле, наданий ШІ при витягуванні його значення. Рекомендується англійською мовою незалежно від мови документа. Необов'язково, якщо надано <code>label</code>.</td><td>null</td><td>&#x3C;string></td></tr></tbody></table>

> **Примітка:** Для кожного поля має бути надано принаймні одне з двох — `label` або `extractionHint`, щоб ШІ мав що шукати.

**Приклад cURL:**

Приклад використання cURL із кроком `anydoc-reader`:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "en"
    },
    "steps": [
        {
            "type": "anydoc-reader",
            "key": "anydoc-payslip-1",
            "title": { "en": "AnyDoc upload" },
            "description": { "en": "Upload your most recent payslip so we can confirm your stated income." },
            "documentType": "Payslip",
            "allowedFormats": ["pdf", "image"],
            "pageConfiguration": "multiple",
            "pageCount": 2,
            "documentValidity": {
                "enabled": true,
                "dateField": "issue-date",
                "maxAge": { "value": 3, "unit": "months" }
            },
            "language": "en",
            "extractionHint": "This is a European payroll slip. Salary figures may use either comma or period as decimal separator.",
            "confidenceThreshold": 80,
            "retryLimit": 3,
            "fields": [
                { "key": "employee-name", "type": "text", "label": "Employee name", "mandatory": true },
                { "key": "issue-date", "type": "date", "label": "Issue date", "mandatory": true },
                { "key": "net-salary", "type": "money", "label": "Net salary", "mandatory": true, "confidenceThreshold": 90 }
            ]
        }
    ]
}'
```

</details>

***

### **SSN verification (Перевірка SSN)**

Крок SSN verification перевіряє номер соціального страхування (Social Security Number) користувача як частину процесу ідентифікації.

**Конфігурації кроку SSN verification:**

* **Заголовок:** `SSN verification`
* **Тип**: `ssn`
* **Ключ**: визначається клієнтом, має залишатися унікальним у межах сесії

**Приклад cURL:**

Приклад використання cURL із прапорцями **`return_url`** та **`language`** та кроком **`ssn`**:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "en"
    },
    "steps": [
        {
            "type": "ssn",
            "title": {
                "en": "SSN verification"
            },
            "key": "ssn-gk466q"
        }
    ]
}'
```

</details>

***

### User questionnaire (Опитувальник користувача)

Крок user questionnaire дозволяє збирати власний ввід користувача як частину потоку верифікації. Він підтримує різні типи запитань та надає багатомовну підтримку для заголовків та описів. Усі відповіді зберігаються в сесії верифікації. Цей крок має дещо іншу структуру порівняно з іншими кроками.

**Конфігурації кроку User questionnaire:**

* `type`

  Має бути встановлено як `"user-questionnaire"`, щоб визначити цей крок як блок опитувальника користувача.
* `key`\
  Визначений клієнтом унікальний ключ для цього кроку опитувальника. Має залишатися унікальним у межах однієї сесії, щоб уникнути конфліктів.
* `title`\
  Основний заголовок опитувальника, що відображається в інтерфейсі користувача.\
  Завжди має надаватися як \<object> з кодами мов як ключами (наприклад, `"en"`), навіть якщо використовується лише одна мова. Це забезпечує узгодженість та підтримує майбутню локалізацію.
* `description`\
  Текст, що відображається під заголовком в інтерфейсі користувача, надаючи контекст чи інструкції.\
  Завжди має бути \<object> кодів мов. Той самий формат та правила, що й для `title`.
* `questions`\
  Масив об'єктів запитань, які будуть показані користувачеві.\
  Підтримувані типи запитань включають:
  * `string`: **Коротка відповідь** – Користувач вводить коротку текстову відповідь.
  * `multiple-choice`: **Прапорці** – Дозволяє користувачеві обрати один або декілька варіантів.
  * `options`: **Radio** – Користувач обирає один варіант зі списку.
  * `dropdown` : **Випадаючий список** – Користувач обирає один або декілька варіантів із випадаючого меню.
  * `file`: **Завантаження файлу** – Дозволяє користувачеві завантажити файл як відповідь.
  * `attachment`: **Вкладення -** Дозволяє прикріплювати файли динамічно (через API/конфігурацію) або за сесією. Залежно від конфігурації, файли можуть бути попередньо прикріплені для користувача або завантажені оператором під час сесії.
* `successButtonTitle`\
  Визначає мітку кнопки підтвердження, показаної в кінці опитувальника.\
  Також має бути \<object> кодів мов, навіть якщо використовується лише одна мова.\
  Якщо будь-яке запитання позначено як `"mandatory": true`, кнопка залишатиметься вимкненою, доки не будуть дані відповіді на всі обов'язкові запитання.

**Questions (Запитання)**

Кожне запитання в масиві `questions` підтримує набір параметрів, що визначають його поведінку та вигляд для користувача. Ось розбір усіх підтримуваних властивостей:

* `type`\
  Визначає тип запитання.\
  Підтримувані значення:
  * `string` – Коротка відповідь
  * `multiple-choice` – Прапорець (множинний вибір)
  * `options` – Перемикачі Radio (одиничний вибір)
  * `dropdown` – Випадаюче меню (одиничний або множинний вибір)
  * `file` – Завантаження файлу
  * `attachment` - Прикріпити файли та поділитися з кінцевим користувачем
* `title`\
  Багатомовний \<object>, що представляє мітку запитання.\
  Приклад:

```json
"title": {
  "en": "What is your occupation?",
  "fr": "Quelle est votre profession ?"
}
```

* `key`\
  **Унікальний ідентифікатор** запитання в межах того самого опитувальника. Визначається клієнтом та використовується для посилання та мапінгу даних.
* `mandatory`\
  Вказує, чи потрібно відповісти на запитання, перш ніж користувач зможе продовжити.
  * Значення: `true` або `false`
* `answer`\
  Дозволяє **попередньо встановити відповідь** для користувача.

  * `string`: Простий текстовий рядок (наприклад, `"John Doe"`).
  * `options`: Один ключ варіанту (наприклад, `"opt_a"`).
  * `multiple-choice`: Масив ключів варіантів (наприклад, `["opt_a", "opt_c"]`).
  * `dropdown`: Не застосовується.
  * `file`: Не застосовується.
  * `attachment`: Масив ID файлів

  *Примітка: Кінцеві користувачі* можуть змінювати попередньо заповнені відповіді, якщо не увімкнено `readOnly`.
* `readOnly`\
  Показує запитання в **режимі, недоступному для редагування**. Користувачі можуть переглядати запитання та відповідь, але не можуть їх змінити.
  * Значення: `true` або `false`
* `showConditions`\
  Визначає **правило умовного показу** для запитання, на основі відповіді на попереднє запитання.
  * `questionKey` Ключ контролюючого запитання.
  * `answer` Ключ відповіді (для radio/checkbox) або конкретний текст (для string)

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

* `multiple`\
  Специфічно для типу `dropdown`.
  * Якщо `true`, користувач може обрати **декілька значень** із випадаючого списку.
  * Значення: `true` або `false`

**Options (Варіанти)**

Варіанти використовуються виключно в запитаннях типу `multiple-choice`, `options` та `dropdown`. Вони визначають вибіркові варіанти, з яких користувач може обрати.

Кожне запитання, що підтримує варіанти, має включати такий параметр:

* `options`\
  Масив об'єктів варіантів для запитання. Кожен об'єкт має включати таке:
* `title`\
  Текстова мітка для варіанту, показана користувачеві під час потоку верифікації.\
  Завжди має надаватися як \<object> з кодами мов як ключами, навіть якщо використовується лише одна мова.\
  Це забезпечує узгодженість у багатомовних потоках.\
  Приклад:

```json
{
  "en": "Self-employed"
}
```

* `key`\
  Унікальний ідентифікатор для варіанту в межах опитувальника.\
  Це значення використовується для посилання в попередньо встановлених відповідях, умовах та даних сесії.\
  Має бути унікальним у межах того самого опитувальника, щоб уникнути конфліктів.

**Список параметрів з прикладами:**

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує опитувальник.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "terms-and-conditions"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок опитувальника користувача, показаний як заголовок блоку з боку користувача. Заголовок може бути &#x3C;object>, що містить різні <strong>мови</strong>, дозволяючи показувати заголовок обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком з боку користувача. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні <strong>мови</strong>, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>Масив запитань наступних типів: <code>string</code>, <code>multiple-choice</code> , <code>options</code>, <code>dropdown</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        }
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option1"
        },
        { 
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>successButtonTitle</code></td><td>Заголовок кнопки дії в опитувальнику. Якщо запитання є обов'язковими, кнопка деактивується, доки користувач не завершить опитувальник.</td><td>Confirm</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"successButtonTitle": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr></tbody></table>

**Приклад cURL:**

<details>

<summary><em>Розгорнути, щоб переглянути приклад user-questionnaire</em></summary>

<pre class="language-bash"><code class="lang-bash">curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "es"
},
"steps": [
    {
            "key": "questionnaire-page-1",
            "type": "user-questionnaire",
            "title": { 
                "es": "Tu título",
                "en": "Your title"
<strong>                },
</strong>            "description": {
                "es": "Tu descripción",
                "en": "Your description"
                },
            "questions": [
                {
                "type": "string",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question1",
                "mandatory": true
                },
                {
                "type": "multiple-choice",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question2",
                "mandatory": false,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option1"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option2"
                    }
                ],
                "answer": ["option2"],
                "readOnly": true
                },
                {
                "type": "options",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question3",
                "mandatory": true,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option3"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option4"
                    }
                ]
            }
        ]
    }
]
}'
</code></pre>

</details>

**Тип запитання: Коротка відповідь**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="117.875">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>string</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "string"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "your-address"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>format</code></td><td>Визначає очікувану структуру відповіді користувача. Визначає, як перевіряється ввід.</td><td><code>free-text</code></td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"format": {
    "type": "free-text"
}
</code></pre><pre class="language-json"><code class="lang-json">"format": {
    "type": "email"
}
</code></pre><pre><code>"format": {
    "type": "contactNumber"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, попередньо заповнену відповідь можна показувати різними мовами.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": { 
        "en": "This is a prefilled answer",
        "es":"Esta es una respuesta prellenada."
}
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання КОРОТКА ВІДПОВІДЬ</em></summary>

```json
"questions": [
    {
        "type": "string",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question1",
        "mandatory": true,
        "format": {
            "type": "email"
        },
        "answer": {
            "en": "This is a prefilled answer",
            "es": "Esta es una respuesta prellenada."
        },
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
        },
        "readOnly": false
    }
]
```

</details>

***

**Тип запитання: Прапорець (Checkbox)**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>multiple-choice</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "multiple-choice"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "check-two-answers"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь являє собою масив (<code>array</code>) <strong>ключів варіантів</strong> відповіді, визначених для цього запитання.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": [
    "option-1",
    "option-2"
]
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ПРАПОРЕЦЬ</em></summary>

```json
"questions": [
    {
        "type": "multiple-choice",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question2",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": [
                "identity-document",
                "proof-of-address"
            },
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

**Тип запитання: Radio**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>options</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "options"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-one-answer"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь є &#x3C;string> <strong>ключа варіанту</strong>, призначеного для цього запитання.</td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": "option-1"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання RADIO</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question3",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": "identity-document",
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

**Тип запитання: Випадаючий список**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>dropdown</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "dropdown"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>multiple</code></td><td><p>Вказує, чи запитання є одиничним чи множинним вибором.</p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"multiple": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ВИПАДАЮЧИЙ СПИСОК</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question4",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "multiple": true,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

**Тип запитання: Завантаження файлу**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>file</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "file"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є <code>&#x3C;object></code> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні мови, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Вказує типи файлів, які користувач може завантажувати.<br><br>Можливі значення:<br><code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Вказує максимальну кількість файлів, які користувач може завантажити.<br><br>Можливі значення:<br>Число від 1 до 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ЗАВАНТАЖЕННЯ ФАЙЛУ</em></summary>

```json
"questions": [
    {
        "type": "file",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question5",
            "mandatory": true,
            "fileTypes": [
            "pdf",
            "image"
            ],
            "filesMaxCount": 5,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

**Тип запитання: Вкладення**

Тип запитання **Attachment** дозволяє прикріпляти файли до опитувальника. Він підтримує два основних випадки використання:

1. **Вкладення, додані оператором за сесією**\
   Оператор завантажує файли під час або перед сесією верифікації та ділиться ними з кінцевим користувачем.
2. **Попередньо визначені вкладення з конфігурації чи API**\
   Файли завантажуються в інтерфейсі конфігурації або динамічно надаються через API. Ці файли автоматично включаються в майбутні сесії.

**Поведінка**

* Вкладення видимі як оператору, так і кінцевому користувачу.
* Коли файли надані через API (`answer`) чи конфігурацію, вони з'являться при відкритті опитувальника.
* Залежно від налаштувань, оператору може бути дозволено або заборонено змінювати вкладення після того, як користувач підтвердив опитувальник.

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>attachment</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "attachment"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "attached-documents"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є <code>&#x3C;object></code> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні мови, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Вказує типи файлів, які користувач може завантажувати.<br><br>Можливі значення:<br><code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Вказує максимальну кількість файлів, які користувач може завантажити.<br><br>Можливі значення:<br>Число від 1 до 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>allowOperatorUpload</code></td><td>Контролює, як додаються файли:<br>• <strong>true</strong> – оператор завантажує файли за сесією.<br>• <strong>false</strong> – файли надаються лише через конфігурацію чи API.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorUpload": true
</code></pre></td></tr><tr><td><code>allowOperatorOverride</code></td><td>Якщо <strong>false</strong>, оператор не може редагувати вкладення після того, як користувач підтвердив опитувальник.<br>Якщо <strong>true</strong>, оператор все ще може завантажувати або видаляти файли.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorOverride": true
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ВКЛАДЕННЯ</em></summary>

```json
"questions": [
    {
        "type": "attachment",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "description": {
            "es": "Tu descripción",
            "en": "Your description"
            },
        "key": "question5",
        "fileTypes": [
            "pdf",
            "image"
            ],
        "filesMaxCount": 5,
        "allowOperatorUpload": true,
        "allowOperatorOverride": true,
        "answer": [ ],
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
            }
        }
    ]
```

</details>

***

### Operator questionnaire (Опитувальник оператора)

Опитувальник оператора є частиною сесії та призначений для заповнення **оператором**, під час або після дзвінка верифікації. Він дозволяє операторам збирати конкретну інформацію або надавати ручний ввід.\
Його структура тісно віддзеркалює опитувальник користувача, з основною відмінністю в тому, хто заповнює форму.

**Конфігурації кроку Operator questionnaire:**

* `type`\
  Має бути встановлено як `"operator-questionnaire"`, щоб визначити цей крок як форму для оператора.
* `key`\
  Унікальний ідентифікатор для кроку опитувальника оператора. Цей ключ визначається клієнтом і має залишатися унікальним у межах однієї сесії.
* `title`\
  Назва розділу, як показано в інтерфейсі оператора.\
  Завжди має бути \<object> з кодами мов як ключами, навіть якщо використовується лише одна мова.\
  Приклад:

```json
"title": {
  "en": "Operator notes"
}
```

* `description`\
  Текст, показаний під заголовком, використовується для надання контексту чи інструкцій оператору.\
  Також має надаватися як `<object>` кодів мов.
* `questions`\
  Масив об'єктів запитань, які визначають поля, які оператор заповнюватиме.\
  Підтримувані типи запитань включають:
  * `string`: **Коротка відповідь** – Оператор вводить коротку текстову відповідь.
  * `multiple-choice`: **Прапорець** – Оператор обирає одне або декілька значень зі списку варіантів.
  * `options`: **Radio** – Оператор обирає один варіант із заздалегідь визначеного набору.
  * `dropdown`: **Випадаюче меню** – Оператор обирає один або декілька варіантів із випадаючого списку, залежно від конфігурації.
  * `file`: **Завантаження файлу** – Оператор завантажує один або декілька файлів (наприклад, документи чи зображення) як частину опитувальника.

**Questions (Запитання)**

Кожне запитання в опитувальнику оператора має бути визначено як об'єкт у масиві `questions`. Для кожного запитання підтримуються такі параметри:

* `type`\
  Тип запитання. Підтримувані значення:
  * `string` – Коротка відповідь
  * `multiple-choice` – Прапорець
  * `options` – Перемикачі Radio
  * `dropdown` – Випадаючий список
  * `file` – Завантаження файлу
* `title`\
  Заголовок запитання. Немає обмежень щодо довжини чи символів.\
  Завжди має надаватися як \<object> кодів мов (наприклад, `"en"`, `"de"`), навіть якщо використовується лише одна мова.\
  Приклад:

```json
"title": {
  "en": "Reason for rejection"
}
```

* `key`\
  Унікальний ідентифікатор для запитання, визначений клієнтом. Має бути унікальним у межах того самого опитувальника.
* `mandatory`\
  \<boolean>. Вказує, чи потрібно відповісти на запитання перед поданням опитувальника.\
  За замовчуванням `false`.
* `answer`\
  Дозволяє **попередньо встановити відповідь** для оператора.

  * Для `string`: Простий текстовий рядок (наприклад, `"Invalid ID"`).
  * Для `options`: Один ключ варіанту (наприклад, `"opt_a"`).
  * Для `multiple-choice`: Масив ключів варіантів (наприклад, `["opt_a", "opt_c"]`).
  * Для `dropdown`: Не застосовується.
  * Для `file`: Не застосовується.

  *Примітка:* Оператори можуть змінювати попередньо заповнені відповіді, якщо не увімкнено `readOnly`.
* `readOnly`\
  Показує запитання в **режимі, недоступному для редагування**. Оператори можуть переглядати запитання та відповідь, але не можуть їх змінити.
* `showConditions`\
  Визначає **правило умовного показу** для запитання, на основі відповіді на попереднє запитання.
  * `questionKey` Ключ контролюючого запитання.
  * `answer` Ключ відповіді (для radio/checkbox) або конкретний текст (для string).

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

**Options (Варіанти)**

Варіанти використовуються виключно в запитаннях типу `multiple-choice`, `options` та `dropdown`. Вони визначають вибіркові варіанти, з яких користувач може обрати.

Кожне запитання, що підтримує варіанти, має включати такий параметр:

* `options`\
  Масив об'єктів варіантів для запитання. Кожен об'єкт має включати таке:
* `title`\
  Текстова мітка для варіанту, показана оператору під час сесії верифікації. Завжди має надаватися як \<object> з кодами мов як ключами, навіть якщо використовується лише одна мова. Це забезпечує узгодженість у багатомовних потоках.

```json
{
  "en": "ID card"
}
```

* `key`\
  Унікальний ідентифікатор для варіанту в межах опитувальника.\
  Це значення використовується для посилання в попередньо встановлених відповідях, умовах та даних сесії.\
  Має бути унікальним у межах того самого опитувальника, щоб уникнути конфліктів.

**Список параметрів з прикладами:**

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує опитувальник.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "document-collection"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок опитувальника оператора, показаний як назва вкладки в сесії. Заголовок може бути <code>&#x3C;object></code>, що містить різні <strong>мови</strong>, дозволяючи показувати заголовок обраною мовою.</td><td>-</td><td>&#x3C;string> or &#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Подібно до заголовка, опис може бути &#x3C;object>, що містить різні <strong>мови</strong>, тож він може відображатися обраною мовою.</td><td>-</td><td>&#x3C;string> or &#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>Масив запитань наступних типів: <code>string</code>, <code>multiple-choice</code> та <code>options</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": "Your title",
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": "Your title",
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": "Your title",
        "key": "option1"
        },
        { 
        "title": "Your title",
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

**Приклад cURL:**

<details>

<summary><em>Розгорнути, щоб переглянути приклад operator-questionnaire</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "restrict_url_sharing": true,
        "language": "es"
    },
    "steps": [
        {
            "key": "questionnaire-page-1",
            "type": "operator-questionnaire",
            "title": {
                "es": "Tu título",
                "en": "Your title"
            },
            "description": {
                "es": "Tu descripción",
                "en": "Your description"
            },
            "questions": [
                {
                    "type": "string",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question1",
                    "mandatory": true
                },
                {
                    "type": "multiple-choice",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question2",
                    "mandatory": false,
                    "options": [
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option1"
                        },
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option2"
                        }
                    ],
                    "answer": [
                        "option2"
                    ],
                    "readOnly": true
                },
                {
                    "type": "options",
                    "title": {
                        "es": "Tu título",
                        "en": "Your title"
                    },
                    "key": "question3",
                    "mandatory": true,
                    "options": [
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option3"
                        },
                        {
                            "title": {
                                "es": "Tu título",
                                "en": "Your title"
                            },
                            "key": "option4"
                        }
                    ]
                }
            ]
        }
    ]
}'
```

</details>

***

## Additional session parameters (Додаткові параметри сесії)

Окрім `steps` та `flags`, ви також можете налаштувати додаткові параметри при створенні сесії. Ці параметри допомагають з ідентифікацією та керуванням сесією.

<table data-full-width="true"><thead><tr><th width="218">Назва параметра</th><th width="437">Опис</th><th width="216">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>name</code></td><td>Користувацька мітка сесії, показана в панелі керування до завершення верифікації користувачем. Після завершення сесії це значення замінюється іменем верифікованого користувача (якщо доступне).</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>clientUserId</code></td><td>Унікальний ідентифікатор, що використовується для зв'язку сесії з конкретним користувачем у вашій системі. Корисно для групування сесій чи синхронізації з внутрішніми ID користувачів чи облікових записів.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>groupId</code></td><td>Визначає групу, призначену для сесії. Наприклад, під час відеодзвінка лише учасники цієї вказаної групи зможуть отримати дзвінок.</td><td>null</td><td>&#x3C;string></td></tr><tr><td><code>scheduleStartTime</code></td><td>Дата та час, коли сесія стає доступною кінцевому користувачу. До цього часу сесію неможливо розпочати.<br>Формат: ISO 8601 — наприклад, <code>"2024-06-20T07:33:00.000Z"</code></td><td>null</td><td>&#x3C;string> (ISO 8601 datetime)</td></tr><tr><td><code>scheduleEndTime</code></td><td>Дата та час, після якого сесія більше недоступна кінцевому користувачу.<br>Формат: ISO 8601 — наприклад, <code>"2024-06-20T09:00:00.000Z"</code></td><td>null</td><td>&#x3C;string> (ISO 8601 datetime)</td></tr></tbody></table>

**Приклад:**

```json
{
  "name": "KYC for John Smith",
  "clientUserId": "user-12345",
  "groupId": "682c60525a91a1e5b473858d",
  "scheduleStartTime": "2024-06-20T07:33:00.000Z",
  "scheduleEndTime": "2024-06-20T09:00:00.000Z",
  "steps": [...],
  "flags": [...]
}
```


# KYB (Know Your Business)

Потік KYB перевіряє легітимність суб'єктів господарювання, включно з даними компанії, реєстраційними документами та пов'язаними представниками.

**Потік KYB** призначений для збору та перевірки інформації про компанію, включно з даними про саму організацію, її бенефіціарів та представників.\
Він гарантує, що всі відповідні суб'єкти ідентифіковані та перевірені перед завершенням процесу onboarding.

Потік KYB складається з трьох основних кроків:

{% stepper %}
{% step %}
[Company data (Дані компанії)](#company-data-dani-kompaniyi)
{% endstep %}

{% step %}
[Beneficiaries (Бенефіціари)](#beneficiaries-beneficiari)
{% endstep %}

{% step %}
[Review (Перегляд)](#review-pereglyad)
{% endstep %}
{% endstepper %}

Кожен крок повністю настроюваний і може мати власні параметри.

## Flags (Прапорці)

`flags` — це об'єкт, що містить необов'язкові параметри конфігурації для налаштування потоку верифікації KYB.\
Нижче наведено огляд найпоширеніших прапорців:

<table data-full-width="true"><thead><tr><th width="218">Назва прапорця</th><th width="437">Опис</th><th width="216">За замовчуванням</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>skip_face</code></td><td>Пропускає крок <code>liveness</code>, якщо він вже існує у визначених кроках. Запобігає дублюванню при використанні власних потоків.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>skip_document</code></td><td>Пропускає крок <code>identity-document</code>, якщо він вже існує у визначених кроках. Запобігає дублюванню при використанні власних потоків.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>return_url</code></td><td>URL для перенаправлення користувача після завершення процесу ідентифікації. Якщо не вказано, вважається, що сесія вбудована в iframe.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>language</code></td><td><p>Код мови інтерфейсу користувача. Підтримувані значення:</p><pre data-overflow="wrap"><code>"es", "ka", "uk", "ru", "uz", "it", "gr", "tr", "ro", "ar", "de", "pl", "hi", "bn", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td><code>"en"</code></td><td>&#x3C;string></td></tr><tr><td><code>skip_desktop</code></td><td>Обмежує сесії лише мобільними пристроями. Якщо ініційовано на комп'ютері, показується QR-код для перенесення сесії на мобільний пристрій.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr><tr><td><code>switch_device_url</code></td><td>Користувацький URL для відображення в QR-коді, коли камера недоступна або заблокована. Якщо не вказано або порожньо, QR-код не відображатиметься.</td><td><code>null</code></td><td>&#x3C;string></td></tr><tr><td><code>restrict_url_sharing</code></td><td>Забороняє використання URL сесії на іншому браузері чи пристрої.<br>Якщо <code>true</code>, QR-код не з'явиться, коли доступ до камери заборонено — якщо тільки <code>switch_device_url</code> також не визначено.</td><td><code>false</code></td><td>&#x3C;boolean></td></tr></tbody></table>

## Steps (Кроки)

Масив `steps` визначає послідовність та структуру процесу KYB. Він передається разом із параметрами `company_key` та `flags` при створенні сесії.

Кожен крок у масиві може містити власні властивості:

<table><thead><tr><th width="163.91015625">Властивість</th><th>Опис</th></tr></thead><tbody><tr><td><code>type</code></td><td>Тип конкретного кроку (див. список підтримуваних типів кроків нижче).</td></tr><tr><td><code>key</code></td><td>Унікальний ідентифікатор кроку. Цей ключ можна налаштувати, але він має залишатися унікальним у межах сесії.</td></tr><tr><td><code>flags</code></td><td>Прапорці конфігурації, специфічні для кроку, які контролюють поведінку цього кроку.</td></tr><tr><td><code>title</code></td><td>Користувацький заголовок, наданий клієнтом, що відображається користувачеві під час цього кроку в інтерфейсі.</td></tr></tbody></table>

### **Підтримувані типи кроків**

Нижче наведено список усіх типів кроків, наразі підтримуваних системою:

* Language (Мова)
* Company data (Дані компанії)
* Beneficiaries (Бенефіціари)
* Review (Перегляд)
* User questionnaire (Опитувальник користувача)

***

### Language (Мова)

Крок **Language** дозволяє користувачеві обрати бажану мову інтерфейсу на початку процесу ідентифікації.

**Конфігурації кроку Language:**

* **Заголовок:** `Language`
* **Тип**: `language`
* **Ключ**: `language`
* **Масив** `languages`

<table data-full-width="true"><thead><tr><th width="259">Прапорець</th><th width="448">Опис</th><th width="109.34765625">За замовчуванням</th><th width="130.85546875">Тип</th></tr></thead><tbody><tr><td><code>languages</code></td><td><p>Масив кодів мов для відображення. Якщо залишити порожнім, показуються всі підтримувані мови.</p><pre data-overflow="wrap"><code>"en", "ka", "es", "uk", "gr", "it", "de", "ru", "uz", "ro", "tr", "ar", "pl", "bn", "hi", "hy", "az", "ja", "pt", "fr", "kk", "sv"
</code></pre></td><td>Усі</td><td>Array&#x3C;string></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
    "company_key": "your_company_key_here",
    "flags": {
        "return_url": "https://example.com/",
        "language": "es"
    } ,
    "steps": [
     {
                "title": {
                  "en": "Language",
                  "ka": "ენა",
                  "es": "Idioma",
                  "uk": "Мова",
                  "gr": "Γλώσσα",
                  "it": "Lingua",
                  "de": "Sprache",
                  "ru": "Язык",
                  "uz": "Til",
                  "ro": "Limbă",
                  "tr": "Dil",
                  "ar": "اللغة",
                  "pl": "Język",
                  "bn": "ভাষা",
                  "hi": "भाषा",
                  "hy": "Լեզու",
                  "az": "Dil",
                  "ja": "言語",
                  "pt": "Idioma",
                  "fr": "Langue",
                  "kk": "Тіл",
                  "sv": "Språk"
                },
                "type": "language",
                "key": "language",
                "languages": [
                    "en",
                    "ka",
                    "es",
                    "uk",
                    "gr",
                    "it",
                    "de",
                    "ru",
                    "uz",
                    "ro",
                    "tr",
                    "ar",
                    "pl",
                    "bn",
                    "hi",
                    "hy",
                    "az",
                    "ja",
                    "pt",
                    "fr",
                    "kk",
                    "sv"
                ]
            },
            {
                "title": {
                  "en": "ID verification",
                  "ka": "პირადობის დადასტურება",
                  "es": "Verificación de identidad",
                  "uk": "Підтвердження особи",
                  "gr": "Επαλήθευση ταυτότητας",
                  "it": "Verifica dell'identità",
                  "de": "Identitätsprüfung",
                  "ru": "Проверка удостоверения личности",
                  "uz": "Shaxsni tasdiqlash",
                  "ro": "Verificare a identității",
                  "tr": "Kimlik doğrulama",
                  "ar": "التحقق من الهوية",
                  "pl": "Weryfikacja tożsamości",
                  "bn": "পরিচয় যাচাই",
                  "hi": "पहचान सत्यापन",
                  "hy": "Անձնագրի հաստատում",
                  "az": "Şəxsiyyətin təsdiqi",
                  "ja": "本人確認",
                  "pt": "Verificação de identidade",
                  "fr": "Vérification d'identité",
                  "kk": "Жеке басын тексеру",
                  "sv": "ID-verifiering"
            },
                "type": "identity-document",
                "key": "select_document_id-1",
                "flags": {
                    "document_types": [
                        "id",
                        "passport",
                        "driver_license",
                        "residence_license"
                    ],
                    "allow_document_upload": false,
                    "disable_document_capture": false
                }
            }
    ]
}'
```

</details>

***

### Company data (Дані компанії)

Цей крок збирає основну інформацію про компанію.

* **Заголовок:** `Company data`
* **Опис:** `Follow the simple steps below`
* **Тип**: `company`
* **Ключ**: `company`
* **Поля:**
  * Назва компанії (завжди обов'язкове)
  * Реєстраційний номер (завжди обов'язкове)
  * Країна реєстрації (завжди обов'язкове)
  * Тип юридичної особи
  * Юридична адреса
  * ПДВ / Податковий ID
  * Дата заснування
  * Контактний номер
  * Контактна email-адреса

**Приклад кроку:**

```json
{
  "type": "company",
  "key": "company",
  "title": { "en": "Company data" },
  "description": { "en": "Follow the simple steps below" },
  "fields": [...]
}
```

**Параметри кроку:**

<table data-full-width="true"><thead><tr><th width="224.7890625">Параметр</th><th width="632.81640625">Опис</th><th width="121">Тип</th></tr></thead><tbody><tr><td><code>type</code></td><td>Тип кроку. Має бути <code>company</code>.</td><td>&#x3C;string></td></tr><tr><td><code>key</code></td><td>Унікальний ідентифікатор кроку.</td><td>&#x3C;string></td></tr><tr><td><code>title</code></td><td>Локалізований текст заголовка, що відображається користувачеві як заголовок блоку. Заголовок може бути &#x3C;object>, що містить різні <strong>мови</strong>, дозволяючи показувати заголовок обраною мовою під час потоку.</td><td>&#x3C;object></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком з боку користувача. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні <strong>мови</strong>, тож він може відображатися обраною мовою під час потоку.</td><td>&#x3C;object></td></tr><tr><td><code>fields</code></td><td>Список полів, які збиратимуться під час цього кроку.</td><td>&#x3C;array></td></tr></tbody></table>

**Поля:**

Приклад:

```json
"fields": [
                  { "type": "companyName", "mandatory": true },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ]
```

<table data-full-width="true"><thead><tr><th width="237.4921875">Поле</th><th width="593.64453125">Опис</th><th width="195.2734375">Тип вводу</th></tr></thead><tbody><tr><td><code>companyEntityType</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Тип юридичної особи. Варіанти включають:</p><ul><li>Товариство з обмеженою відповідальністю</li><li>Публічна компанія</li><li>Індивідуальний підприємець</li><li>Партнерство</li><li>Корпорація</li><li>Траст</li><li>Приватний фонд</li><li>Благодійна організація</li><li>Некомерційна організація</li><li>Інше</li></ul></td><td>Випадаючий список</td></tr><tr><td><code>companyName</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Офіційна зареєстрована назва компанії.</p></td><td>Текстове поле</td></tr><tr><td><code>registrationNumber</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Реєстраційний номер компанії.</p></td><td>Текстове поле</td></tr><tr><td><code>registrationCountry</code></td><td><strong>Обов'язкове поле.</strong><br>Країна реєстрації. Варіанти: список усіх країн.</td><td>Випадаючий список</td></tr><tr><td><code>legalAddress</code></td><td>Зареєстрована юридична адреса компанії.</td><td>Текстове поле</td></tr><tr><td><code>taxId</code></td><td>Податковий ідентифікаційний номер.</td><td>Текстове поле</td></tr><tr><td><code>dateOfIncorporation</code></td><td>Дата заснування компанії.</td><td>Вибір дати</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону компанії.</td><td>Текстове поле</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса компанії.</td><td>Текстове поле</td></tr></tbody></table>

***

### Beneficiaries (Бенефіціари)

Крок **Beneficiaries** збирає інформацію про всіх осіб чи компаній із ролями в організації.

Кожна роль може ініціювати потік верифікації KYC або KYB.

**Підтримувані ролі:**

* **Shareholder (Акціонер)** – може бути фізичною особою або іншою компанією
* **UBOs (Кінцевий бенефіціарний власник)** – завжди фізична особа з правом власності/контролю
* **Director (Директор)** – окремий член ради директорів
* **Representative (Представник)** – уповноважена фізична особа, що діє від імені компанії
* **Other (Інше)** – власна роль (потребує назви посади)

**Приклад кроку:**

```json
{
  "type": "beneficiaries",
  "key": "beneficiaries",
  "title": { "en": "Beneficiaries" },
  "description": { "en": "Enter information about the company's beneficiaries" },
  "roles": { ... },
  "kycConfigId": "687e0ba12cf633bd323cb0db",
  "kybConfigId": "687e0ba12cf633bd323cb0d2"
}
```

**Параметри кроку:**

<table data-full-width="true"><thead><tr><th width="257.1328125">Параметр</th><th width="540.40234375">Опис</th><th width="198.234375">Тип</th></tr></thead><tbody><tr><td><code>type</code></td><td>Тип кроку. Має бути <code>beneficiaries</code>.</td><td>&#x3C;string></td></tr><tr><td><code>key</code></td><td>Унікальний ідентифікатор кроку.</td><td>&#x3C;string></td></tr><tr><td><code>title</code></td><td>Локалізований текст заголовка, що відображається користувачеві як заголовок блоку. Заголовок може бути &#x3C;object>, що містить різні <strong>мови</strong>, дозволяючи показувати заголовок обраною мовою під час потоку.</td><td>&#x3C;object></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком з боку користувача. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні <strong>мови</strong>, тож він може відображатися обраною мовою під час потоку.</td><td>&#x3C;object></td></tr><tr><td><code>kycConfigId</code></td><td>ID конфігурації KYC, що застосовується до фізичних осіб.</td><td>&#x3C;string></td></tr><tr><td><code>kybConfigId</code></td><td>ID конфігурації KYB, що застосовується до компаній.</td><td>&#x3C;string></td></tr><tr><td><code>roles</code></td><td>Визначає ролі (<code>shareholder</code>, <code>ubo</code>, <code>director</code>, <code>representative</code>, <code>other</code>).</td><td>&#x3C;object></td></tr></tbody></table>

#### **Роль: Shareholder (Акціонер)**

* Може бути **фізичною особою** або **компанією**.
* `verification: true` → ініціює потік верифікації
  * **Фізична особа** → KYC (`kycConfigId`)
  * **Компанія** → KYB (`kybConfigId`)

**Важливо:**\
Для потоків верифікації акціонерів потрібні попередньо створені конфігурації KYC та KYB.\
Ці конфігурації визначають, які кроки верифікації (наприклад, завантаження документа, селфі, опитувальник) будуть застосовані під час процесу.\
Щоб дізнатися, як створювати та керувати конфігураціями KYC, див. Посібник для розробників KYC або Посібник з конфігурації KYC.

**Приклад ролі:**

```json
"roles": {
        "shareholder": {
              "fields": [
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyName", "mandatory": true },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Поля Shareholder:**

<table data-full-width="true"><thead><tr><th width="237.4921875">Поле</th><th width="484.6484375">Опис</th><th width="111.6953125">Тип вводу</th><th>Застосовується до</th></tr></thead><tbody><tr><td><code>ownershipPercentage</code></td><td>Відсоток володіння компанією.</td><td>Текстове поле</td><td>Компанія / Фізична особа</td></tr><tr><td><code>companyName</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Офіційна зареєстрована назва компанії.</p></td><td>Текстове поле</td><td>Компанія</td></tr><tr><td><code>registrationNumber</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Реєстраційний номер компанії-акціонера.</p></td><td>Текстове поле</td><td>Компанія</td></tr><tr><td><code>registrationCountry</code></td><td><strong>Обов'язкове поле.</strong><br>Країна реєстрації. Варіанти: список усіх країн.</td><td>Випадаючий список</td><td>Компанія</td></tr><tr><td><code>companyEntityType</code></td><td><p><strong>Обов'язкове поле.</strong></p><p>Тип юридичної особи. Варіанти включають:</p><ul><li>Товариство з обмеженою відповідальністю</li><li>Публічна компанія</li><li>Індивідуальний підприємець</li><li>Партнерство</li><li>Корпорація</li><li>Траст</li><li>Приватний фонд</li><li>Благодійна організація</li><li>Некомерційна організація</li><li>Інше</li></ul></td><td>Випадаючий список</td><td>Компанія</td></tr><tr><td><code>legalAddress</code></td><td>Зареєстрована юридична адреса компанії-акціонера.</td><td>Текстове поле</td><td>Компанія</td></tr><tr><td><code>taxId</code></td><td>Податковий ідентифікаційний номер.</td><td>Текстове поле</td><td>Компанія</td></tr><tr><td><code>dateOfIncorporation</code></td><td>Дата заснування компанії.</td><td>Вибір дати</td><td>Компанія</td></tr><tr><td><code>website</code></td><td>Вебсайт компанії.</td><td>Поле вводу</td><td>Компанія</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону.</td><td>Текстове поле</td><td>Компанія / Фізична особа</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса.</td><td>Текстове поле</td><td>Компанія / Фізична особа</td></tr><tr><td><code>firstName</code></td><td><strong>Обов'язкове поле.</strong><br>Ім'я фізичної особи.</td><td>Текстове поле</td><td>Фізична особа</td></tr><tr><td><code>lastName</code></td><td><strong>Обов'язкове поле.</strong><br>Прізвище фізичної особи.</td><td>Текстове поле</td><td>Фізична особа</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Обов'язкове поле.</strong><br>Дата народження фізичної особи.</td><td>Вибір дати</td><td>Фізична особа</td></tr></tbody></table>

#### **Роль: UBOs**

* Завжди **фізична особа**.
* `verification: true` → ініціює потік KYC (`kycConfigId`)

**Важливо:**\
Для потоків верифікації UBO потрібна попередньо створена конфігурація KYC.\
Ці конфігурації визначають, які кроки верифікації (наприклад, завантаження документа, селфі, опитувальник) будуть застосовані під час процесу.\
Щоб дізнатися, як створювати та керувати конфігураціями KYC, див. Посібник для розробників KYC або Посібник з конфігурації KYC.

**Приклад ролі:**

```json
"roles": {
            "ubo": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "ownershipPercentage", "mandatory": false },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Поля UBOs:**

<table data-full-width="true"><thead><tr><th>Поле</th><th>Опис</th><th>Тип вводу</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Обов'язкове поле.</strong><br>Ім'я фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>lastName</code></td><td><strong>Обов'язкове поле.</strong><br>Прізвище фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Обов'язкове поле.</strong><br>Дата народження фізичної особи.</td><td>Вибір дати</td></tr><tr><td><code>ownershipPercentage</code></td><td>Відсоток володіння компанією.</td><td>Текстове поле</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону компанії.</td><td>Текстове поле</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса компанії.</td><td>Текстове поле</td></tr></tbody></table>

#### **Роль: Director (Директор)**

* Завжди **фізична особа**.
* `verification: true` → ініціює потік KYC (`kycConfigId`)

**Важливо:**\
Для потоків верифікації директора потрібна попередньо створена конфігурація KYC.\
Ці конфігурації визначають, які кроки верифікації (наприклад, завантаження документа, селфі, опитувальник) будуть застосовані під час процесу.\
Щоб дізнатися, як створювати та керувати конфігураціями KYC, див. Посібник для розробників KYC або Посібник з конфігурації KYC.

**Приклад ролі:**

```json
"roles": {
          "director": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Поля Director:**

<table data-full-width="true"><thead><tr><th>Поле</th><th>Опис</th><th>Тип вводу</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Обов'язкове поле.</strong><br>Ім'я фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>lastName</code></td><td><strong>Обов'язкове поле.</strong><br>Прізвище фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Обов'язкове поле.</strong><br>Дата народження фізичної особи.</td><td>Вибір дати</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону компанії.</td><td>Текстове поле</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса компанії.</td><td>Текстове поле</td></tr></tbody></table>

#### **Роль: Representative (Представник)**

* Завжди **фізична особа**.
* `verification: true` → ініціює потік KYC (`kycConfigId`)

**Важливо:**\
Для потоків верифікації представника потрібна попередньо створена конфігурація KYC.\
Ці конфігурації визначають, які кроки верифікації (наприклад, завантаження документа, селфі, опитувальник) будуть застосовані під час процесу.\
Щоб дізнатися, як створювати та керувати конфігураціями KYC, див. Посібник для розробників KYC або Посібник з конфігурації KYC.

**Приклад ролі:**

```json
"roles": {
          "representative": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Поля Representative:**

<table data-full-width="true"><thead><tr><th>Поле</th><th>Опис</th><th>Тип вводу</th></tr></thead><tbody><tr><td><code>firstName</code></td><td><strong>Обов'язкове поле.</strong><br>Ім'я фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>lastName</code></td><td><strong>Обов'язкове поле.</strong><br>Прізвище фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Обов'язкове поле.</strong><br>Дата народження фізичної особи.</td><td>Вибір дати</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону компанії.</td><td>Текстове поле</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса компанії.</td><td>Текстове поле</td></tr></tbody></table>

#### **Роль: Other (Інше)**

* Завжди **фізична особа**.
* `verification: true` → ініціює потік KYC (`kycConfigId`)

**Важливо:**\
Для потоків верифікації ролі Other потрібна попередньо створена конфігурація KYC.\
Ці конфігурації визначають, які кроки верифікації (наприклад, завантаження документа, селфі, опитувальник) будуть застосовані під час процесу.\
Щоб дізнатися, як створювати та керувати конфігураціями KYC, див. Посібник для розробників KYC або Посібник з конфігурації KYC.

**Приклад ролі:**

```json
"roles": {
          "other": {
              "fields": [
                { "type": "positionName", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
        }
}
```

**Поля:**

<table data-full-width="true"><thead><tr><th>Поле</th><th>Опис</th><th>Тип вводу</th></tr></thead><tbody><tr><td><code>positionName</code></td><td><strong>Обов'язкове поле.</strong><br>Назва посади (наприклад, консультант)</td><td>Текстове поле</td></tr><tr><td><code>firstName</code></td><td><strong>Обов'язкове поле.</strong><br>Ім'я фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>lastName</code></td><td><strong>Обов'язкове поле.</strong><br>Прізвище фізичної особи.</td><td>Текстове поле</td></tr><tr><td><code>dateOfBirth</code></td><td><strong>Обов'язкове поле.</strong><br>Дата народження фізичної особи.</td><td>Вибір дати</td></tr><tr><td><code>contactNumber</code></td><td>Контактний номер телефону компанії.</td><td>Текстове поле</td></tr><tr><td><code>email</code></td><td>Контактна email-адреса компанії.</td><td>Текстове поле</td></tr></tbody></table>

***

### Review (Перегляд)

Крок **Review** показує зведення всіх зібраних даних про компанію та бенефіціарів перед поданням. Заявники можуть переглянути та відредагувати інформацію за потреби.

Приклад:

```json
{
  "type": "kyb-review",
  "key": "kyb-review",
  "title": {
    "en": "Checking the data",
    "es": "Verificando los datos"
  },
  "description": {
    "en": "Please check the information below to make sure everything is correct",
    "es": "Por favor revise la información a continuación para asegurarse de que todo esté correcto"
  }
}
```

Цей крок дозволяє заявнику редагувати дані перед поданням.

Приклад KYB cURL:

<details>

<summary><em>Розгорнути, щоб переглянути приклад</em></summary>

```bash
curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "return_url": "https://example.com/",
        "language": "en"
},
  "steps": [
        {
          "type": "company",
          "key": "company",
          "title": {
            "en": "Company data"
          },
          "description": {
            "en": "Follow the simple steps below"
          },
          "fields": [
               { "type": "companyName", "mandatory": true },
               { "type": "companyEntityType", "mandatory": false },
               { "type": "registrationNumber", "mandatory": true },
               { "type": "registrationCountry", "mandatory": true },
               { "type": "legalAddress", "mandatory": true },
               { "type": "taxId", "mandatory": false },
               { "type": "dateOfIncorporation", "mandatory": false },
               { "type": "contactNumber", "mandatory": false },
               { "type": "email", "mandatory": false }
          ]
        },
        {
          "type": "beneficiaries",
          "key": "beneficiaries",
          "title": {
            "en": "Beneficiaries"
          },
          "description": {
            "en": "Enter information about the company's beneficiaries"
          },
          "kycConfigId": "687e0ba12cf633bd323cb0db",
          "kybConfigId": "687e0ba12cf633bd323cb0d2",
          "roles": {
            "shareholder": {
              "fields": [
                  { "type": "ownershipPercentage", "mandatory": false },
                  { "type": "companyName", "mandatory": true },
                  { "type": "companyEntityType", "mandatory": false },
                  { "type": "registrationNumber", "mandatory": true },
                  { "type": "registrationCountry", "mandatory": true },
                  { "type": "legalAddress", "mandatory": false },
                  { "type": "taxId", "mandatory": false },
                  { "type": "dateOfIncorporation", "mandatory": false },
                  { "type": "firstName", "mandatory": true },
                  { "type": "lastName", "mandatory": true },
                  { "type": "dateOfBirth", "mandatory": true },
                  { "type": "contactNumber", "mandatory": false },
                  { "type": "email", "mandatory": false }, 
                  { "type": "website", "mandatory": false }
              ],
              "verification": true
            },
            "ubo": {
              "fields": [
                { "type": "ownershipPercentage", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "director": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "representative": {
              "fields": [
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            },
            "other": {
              "fields": [
                { "type": "positionName", "mandatory": true },
                { "type": "firstName", "mandatory": true },
                { "type": "lastName", "mandatory": true },
                { "type": "dateOfBirth", "mandatory": true },
                { "type": "email", "mandatory": false },
                { "type": "contactNumber", "mandatory": false }
              ],
              "verification": true
            }
          }
        },
        {
          "type": "kyb-review",
          "key": "kyb-review",
          "title": {
            "en": "Checking the data"
          },
          "subtitle": {
            "en": "Please check the information below to make sure everything is correct"
          }
        }
      ]
}'
```

</details>

***

### User questionnaire (Опитувальник користувача)

Крок user questionnaire дозволяє збирати власний ввід користувача як частину потоку верифікації. Він підтримує різні типи запитань та надає багатомовну підтримку для заголовків та описів. Усі відповіді зберігаються в сесії верифікації. Цей крок має дещо іншу структуру порівняно з іншими кроками.

**Конфігурації кроку User questionnaire:**

* `type`\
  Має бути встановлено як `"user-questionnaire"`, щоб визначити цей крок як блок опитувальника користувача.
* `key`\
  Визначений клієнтом унікальний ключ для цього кроку опитувальника. Має залишатися унікальним у межах однієї сесії, щоб уникнути конфліктів.
* `title`\
  Основний заголовок опитувальника, що відображається в інтерфейсі користувача.\
  Завжди має надаватися як \<object> з кодами мов як ключами (наприклад, `"en"`), навіть якщо використовується лише одна мова. Це забезпечує узгодженість та підтримує майбутню локалізацію.
* `description`\
  Текст, що відображається під заголовком в інтерфейсі користувача, надаючи контекст чи інструкції.\
  Завжди має бути \<object> кодів мов. Той самий формат та правила, що й для `title`.
* `questions`\
  Масив об'єктів запитань, які будуть показані користувачеві.\
  Підтримувані типи запитань включають:
  * `string`: **Коротка відповідь** – Користувач вводить коротку текстову відповідь.
  * `multiple-choice`: **Прапорці** – Дозволяє користувачеві обрати один або декілька варіантів.
  * `options`: **Radio** – Користувач обирає один варіант зі списку.
  * `dropdown` : **Випадаючий список** – Користувач обирає один або декілька варіантів із випадаючого меню.
  * `file`: **Завантаження файлу** – Дозволяє користувачеві завантажити файл як відповідь.
  * `attachment`: **Вкладення -** Дозволяє прикріплювати файли динамічно (через API/конфігурацію) або за сесією. Залежно від конфігурації, файли можуть бути попередньо прикріплені для користувача або завантажені оператором під час сесії.
* `successButtonTitle`\
  Визначає мітку кнопки підтвердження, показаної в кінці опитувальника.\
  Також має бути \<object> кодів мов, навіть якщо використовується лише одна мова.\
  Якщо будь-яке запитання позначено як `"mandatory": true`, кнопка залишатиметься вимкненою, доки не будуть дані відповіді на всі обов'язкові запитання.

#### **Questions (Запитання)**

Кожне запитання в масиві `questions` підтримує набір параметрів, що визначають його поведінку та вигляд для користувача. Ось розбір усіх підтримуваних властивостей:

* `type`\
  Визначає тип запитання.\
  Підтримувані значення:
  * `string` – Коротке текстове поле
  * `multiple-choice` – Прапорець (множинний вибір)
  * `options`– Перемикачі Radio (одиничний вибір)
  * `dropdown`– Випадаюче меню (одиничний або множинний вибір)
  * `file`– Завантаження файлу
  * `attachment` - Прикріпити файли та поділитися з кінцевим користувачем
* `title`\
  Багатомовний \<object>, що представляє мітку запитання.\
  Приклад:

```json
"title": {
  "en": "What is your occupation?",
  "fr": "Quelle est votre profession ?"
}
```

* `key`\
  **Унікальний ідентифікатор** для запитання в межах того самого опитувальника. Визначається клієнтом та використовується для посилання та мапінгу даних.
* `mandatory`\
  Вказує, чи має запитання бути відповіджене, перш ніж користувач зможе продовжити.
  * Значення: `true` або `false`
* `answer`\
  Дозволяє **попередньо встановити відповідь** для користувача.

  * `string`: Простий текстовий рядок (наприклад, `"John Doe"`).
  * `options`: Один ключ варіанту (наприклад, `"opt_a"`).
  * `multiple-choice`: Масив ключів варіантів (наприклад, `["opt_a", "opt_c"]`).
  * `dropdown`: Не застосовується.
  * `file`: Не застосовується.
  * `attachment`: Масив ID файлів

  *Примітка: Кінцеві користувачі* можуть змінювати попередньо заповнені відповіді, якщо не увімкнено `readOnly`.
* `readOnly`\
  Показує запитання в **режимі, недоступному для редагування**. Користувачі можуть переглядати запитання та відповідь, але не можуть їх змінити.
  * Значення: `true` або `false`
* `showConditions`\
  Визначає **правило умовного показу** для запитання, на основі відповіді на попереднє запитання.
  * `questionKey` Ключ контролюючого запитання.
  * `answer` Ключ відповіді (для radio/checkbox) або конкретний текст (для string)

```json
"showConditions": {
  "questionKey": "employment-status",
  "answer": "self-employed"
}
```

* `multiple`\
  Специфічно для типу `dropdown`.
  * Якщо `true`, користувач може обрати **декілька значень** із випадаючого списку.
  * Значення: `true` або `false`

#### **Options (Варіанти)**

Варіанти використовуються виключно в запитаннях типу `multiple-choice`, `options` та `dropdown`. Вони визначають вибіркові варіанти, з яких користувач може обрати.

Кожне запитання, що підтримує варіанти, має включати такий параметр:

* `options`\
  Масив об'єктів варіантів для запитання. Кожен об'єкт має включати таке:
* `title`\
  Текстова мітка для варіанту, показана користувачеві під час потоку верифікації.\
  Завжди має надаватися як \<object> з кодами мов як ключами, навіть якщо використовується лише одна мова.\
  Це забезпечує узгодженість у багатомовних потоках.\
  Приклад:

```json
{
  "en": "Self-employed"
}
```

* `key`\
  Унікальний ідентифікатор для варіанту в межах опитувальника.\
  Це значення використовується для посилання в попередньо встановлених відповідях, умовах та даних сесії.\
  Має бути унікальним у межах того самого опитувальника, щоб уникнути конфліктів.

#### **Список параметрів з прикладами:**

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує опитувальник.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "terms-and-conditions"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок опитувальника користувача, показаний як заголовок блоку з боку користувача. Заголовок може бути &#x3C;object>, що містить різні <strong>мови</strong>, дозволяючи показувати заголовок обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком з боку користувача. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні <strong>мови</strong>, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>questions</code></td><td>Масив запитань наступних типів: <code>string</code>, <code>multiple-choice</code> , <code>options</code>, <code>dropdown</code>.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"questions": [
    {
    "type": "string",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        }
    "key": "question1",
    "mandatory": true
    },
    {
    "type": "multiple-choice",
    "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
    "key": "question2",
    "mandatory": false,
    "options": [
        {
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option1"
        },
        { 
        "title": { 
        "es": "Tu título",
        "en": "Your title"
        },
        "key": "option2"
        }
    ]
    }
]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": false
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.</td><td>-</td><td>&#x3C;string> or &#x3C;array></td><td><pre class="language-json"><code class="lang-json">"answer": "option2"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": false
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>successButtonTitle</code></td><td>Заголовок кнопки дії в опитувальнику. Якщо запитання є обов'язковими, кнопка деактивується, доки користувач не завершить опитувальник.</td><td>Confirm</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"successButtonTitle": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr></tbody></table>

#### **Приклад cURL:**

<details>

<summary><em>Розгорнути, щоб переглянути приклад user-questionnaire</em></summary>

<pre class="language-bash"><code class="lang-bash">curl https://widget.identomat.com/external-api/begin/ -d '{
"company_key": "your_company_key_here",
"flags": {
        "restrict_url_sharing": true,
        "language": "es"
},
"steps": [
    {
            "key": "questionnaire-page-1",
            "type": "user-questionnaire",
            "title": { 
                "es": "Tu título",
                "en": "Your title"
<strong>                },
</strong>            "description": {
                "es": "Tu descripción",
                "en": "Your description"
                },
            "questions": [
                {
                "type": "string",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question1",
                "mandatory": true
                },
                {
                "type": "multiple-choice",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question2",
                "mandatory": false,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option1"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option2"
                    }
                ],
                "answer": ["option2"],
                "readOnly": true
                },
                {
                "type": "options",
                "title": {
                "es": "Tu título",
                "en": "Your title"
                },
                "key": "question3",
                "mandatory": true,
                "options": [
                    {
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option3"
                    },
                    { 
                    "title": {
                    "es": "Tu título",
                    "en": "Your title"
                    },
                    "key": "option4"
                    }
                ]
            }
        ]
    }
]
}'
</code></pre>

</details>

#### **Тип запитання: Коротка відповідь**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>string</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "string"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "your-address"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>format</code></td><td>Визначає очікувану структуру відповіді користувача. Визначає, як перевіряється ввід.</td><td><code>free-text</code></td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"format": {
    "type": "free-text"
}
</code></pre><pre class="language-json"><code class="lang-json">"format": {
    "type": "email"
}
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, попередньо заповнену відповідь можна показувати різними мовами.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": { 
        "en": "This is a prefilled answer",
        "es":"Esta es una respuesta prellenada."
}
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання КОРОТКА ВІДПОВІДЬ</em></summary>

```json
"questions": [
    {
        "type": "string",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question1",
        "mandatory": true,
        "answer": {
            "en": "This is a prefilled answer",
            "es": "Esta es una respuesta prellenada."
        },
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
        },
        "readOnly": true
    }
]
```

</details>

***

#### **Тип запитання: Прапорець (Checkbox)**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>multiple-choice</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "multiple-choice"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "check-two-answers"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь є &#x3C;array> <strong>ключів варіантів</strong>, призначених для цього запитання.</td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": [
    "option-1",
    "option-2"
]
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ПРАПОРЕЦЬ</em></summary>

```json
"questions": [
    {
        "type": "multiple-choice",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question2",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": [
                "identity-document",
                "proof-of-address"
            },
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Тип запитання: Radio**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>options</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "options"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-one-answer"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>answer</code></td><td>Дозволяє попередньо встановити відповідь на запитання.<br>Відповідь є &#x3C;string> <strong>ключа варіанту</strong>, призначеного для цього запитання.</td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"answer": "option-1"
</code></pre></td></tr><tr><td><code>readOnly</code></td><td>Показує запитання, але обмежує взаємодію.</td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"readOnly": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання RADIO</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question3",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "answer": "identity-document",
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            },
            "readOnly": true
        }
    ]
```

</details>

***

#### **Тип запитання: Випадаючий список**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>dropdown</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "dropdown"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є &#x3C;object> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>options</code></td><td><p>Масив варіантів для запитання. Кожен варіант може мати:</p><ul><li>"<strong>title</strong>" : Заголовок варіанту. Заголовок є &#x3C;object>, що містить різні мови, дозволяючи показувати варіант обраною мовою під час потоку верифікації.</li><li>"<strong>key</strong>": Ключ для варіанту, обраний клієнтом. Має залишатися унікальним у межах одного опитувальника.</li></ul></td><td>-</td><td>&#x3C;array></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"options": [
    {
        "title": {
            "en": "Identity Document",
            "es": "Documento de identidad"
        },
        "key": "identity-document"
    },
    {
        "title": {
            "en": "Proof of Address",
            "es": "Comprobante de domicilio"
        },
        "key": "proof-of-address"
    ]
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>multiple</code></td><td><p>Вказує, чи запитання є одиничним чи множинним вибором.</p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"multiple": true
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ВИПАДАЮЧИЙ СПИСОК</em></summary>

```json
"questions": [
    {
        "type": "options",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question4",
        "options": [
            {
                "title": {
                    "en": "Identity Document",
                    "es": "Documento de identidad"
                },
                "key": "identity-document"
            },
            {
                "title": {
                    "en": "Proof of Address",
                    "es": "Comprobante de domicilio"
                },
                "key": "proof-of-address"
            ],
            "mandatory": true,
            "multiple": true,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Тип запитання: Завантаження файлу**

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>file</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "file"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "choose-from-list"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є <code>&#x3C;object></code> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні мови, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>mandatory</code></td><td><p>Вказує, чи потрібно обов'язково відповісти на запитання.<br></p><p>Можливі значення:</p><p><code>true</code>, <code>false</code></p></td><td>false</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"mandatory": true
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Вказує типи файлів, які користувач може завантажувати.<br><br>Можливі значення:<br><code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Вказує максимальну кількість файлів, які користувач може завантажити.<br><br>Можливі значення:<br>Число від 1 до 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json5" data-overflow="wrap"><code class="lang-json5">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ЗАВАНТАЖЕННЯ ФАЙЛУ</em></summary>

```json
"questions": [
    {
        "type": "file",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "key": "question5",
            "mandatory": true,
            "fileTypes": [
            "pdf",
            "image"
            ],
            "filesMaxCount": 5,
            "showConditions": {
                "questionKey": "question1",
                "answer": "option1"
            }
        }
    ]
```

</details>

***

#### **Тип запитання: Вкладення**

Тип запитання **Attachment** дозволяє прикріпляти файли до опитувальника. Він підтримує два основних випадки використання:

1. **Вкладення, додані оператором за сесією**\
   Оператор завантажує файли під час або перед сесією верифікації та ділиться ними з кінцевим користувачем.
2. **Попередньо визначені вкладення з конфігурації чи API**\
   Файли завантажуються в інтерфейсі конфігурації або динамічно надаються через API. Ці файли автоматично включаються в майбутні сесії.

**Поведінка**

* Вкладення видимі як оператору, так і кінцевому користувачу.
* Коли файли надані через API (`answer`) чи конфігурацію, вони з'являться при відкритті опитувальника.
* Залежно від налаштувань, оператору може бути дозволено або заборонено змінювати вкладення після того, як користувач підтвердив опитувальник.

Доступні параметри:

<table data-full-width="true"><thead><tr><th width="133">Параметр</th><th width="217">Опис</th><th width="100">За замовчуванням</th><th width="118">Тип</th><th>Приклад</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>attachment</code></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json"><code class="lang-json">"type": "attachment"
</code></pre></td></tr><tr><td><code>key</code></td><td><p>Ключі обираються клієнтом та мають залишатися унікальними в межах однієї сесії.</p><p>Рекомендується використовувати ключ, що коротко описує запитання.</p></td><td>-</td><td>&#x3C;string></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"key": "attached-documents"
</code></pre></td></tr><tr><td><code>title</code></td><td>Заголовок є <code>&#x3C;object></code> мов, тож якщо користувач змінює мову під час потоку верифікації, запитання можна показувати різними мовами. Немає обмежень щодо довжини чи символів.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"title": { 
    "es": "Tu título",
    "en": "Your title"
}
</code></pre></td></tr><tr><td><code>description</code></td><td>Опис, що з'являється під заголовком. Подібно до заголовка, опис може бути &#x3C;object>, що містить різні мови, тож він може відображатися обраною мовою під час потоку верифікації.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json"><code class="lang-json">"description": {
    "es": "Tu descripción",
    "en": "Your description"
}
</code></pre></td></tr><tr><td><code>fileTypes</code></td><td>Вказує типи файлів, які користувач може завантажувати.<br><br>Можливі значення:<br><code>pdf</code>, <code>image</code>.</td><td>[ <code>"pdf"</code>, <code>"image"</code> ]</td><td>&#x3C;array></td><td><pre class="language-json"><code class="lang-json">"fileTypes": [
    "pdf",
    "image"
]
</code></pre></td></tr><tr><td><code>filesMaxCount</code></td><td>Вказує максимальну кількість файлів, які користувач може завантажити.<br><br>Можливі значення:<br>Число від 1 до 10.</td><td>10</td><td>&#x3C;number></td><td><pre class="language-json"><code class="lang-json">"filesMaxCount": 5
</code></pre></td></tr><tr><td><code>showConditions</code></td><td>Цей параметр можна використати, щоб встановити умови для того, чи має запитання відображатися.</td><td>-</td><td>&#x3C;object></td><td><pre class="language-json" data-overflow="wrap"><code class="lang-json">"showConditions": {
    "questionKey": "question1",
    "answer": "option1"
    }
</code></pre></td></tr><tr><td><code>allowOperatorUpload</code></td><td>Контролює, як додаються файли:<br>• <strong>true</strong> – оператор завантажує файли за сесією.<br>• <strong>false</strong> – файли надаються лише через конфігурацію чи API.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorUpload": true
</code></pre></td></tr><tr><td><code>allowOperatorOverride</code></td><td>Якщо <strong>false</strong>, оператор не може редагувати вкладення після того, як користувач підтвердив опитувальник.<br>Якщо <strong>true</strong>, оператор все ще може завантажувати або видаляти файли.</td><td>true</td><td>&#x3C;boolean></td><td><pre class="language-json"><code class="lang-json">"allowOperatorOverride": true
</code></pre></td></tr></tbody></table>

<details>

<summary><em>Розгорнути, щоб переглянути приклад запитання ВКЛАДЕННЯ</em></summary>

```json
"questions": [
    {
        "type": "attachment",
        "title": {
            "es": "Tu título",
            "en": "Your title"
        },
        "description": {
            "es": "Tu descripción",
            "en": "Your description"
            },
        "key": "question5",
        "fileTypes": [
            "pdf",
            "image"
            ],
        "filesMaxCount": 5,
        "allowOperatorUpload": true,
        "allowOperatorOverride": true,
        "answer": [ ],
        "showConditions": {
            "questionKey": "question1",
            "answer": "option1"
            }
        }
    ]
```

</details>


# Довідник API

Документація довідника API надає детальну інформацію про доступні ендпоінти, параметри запитів, формати відповідей та методи автентифікації для інтеграції з Identomat.

### Ліміт запитів

Для захисту стабільності системи та запобігання зловживанням наш API застосовує обмеження швидкості запитів:

* **Ліміт**: Максимум **600 запитів за хвилину** з однієї IP-адреси.
* **Перевищення ліміту**: Якщо IP-адреса перевищує цей поріг, вона буде **тимчасово заблокована на 1 годину**.
* **Відповідь про помилку**: Протягом періоду блокування всі запити з заблокованої IP-адреси повертатимуть помилку **`529 Too many requests`**.

***

### Керування сесіями

Використовуйте ці ендпоінти для створення сесій верифікації та керування ними. Сесії можна запускати за допомогою збереженої конфігурації (рекомендовано) або з власними кроками та прапорцями.

<details>

<summary>begin/ - Створення сесії (застаріле)</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/begin/</mark>](https://widget.identomat.com/external-api/begin/)

**Опис:**

Ініціює нову сесію верифікації. Сесії можна запускати або за допомогою попередньо визначеної конфігурації (`config_id`), або явно вказавши кроки та прапорці для власного потоку.

Цей ендпоінт тепер також підтримує **перевизначення окремих кроків у межах конфігурації**. Це дозволяє вводити динамічні дані (наприклад, попередньо заповнювати дані користувача, як-от ім'я та прізвище), продовжуючи використовувати вашу збережену конфігурацію, роблячи перехід до налаштувань на основі конфігурацій більш гнучким.

**Параметри:**

* `company_key` *(string, обов'язковий)*- Секретний ключ компанії.
* `parent_session_id` *(string, необов'язковий)* – Вказує ID батьківської сесії при створенні дочірньої сесії для верифікації з декількома учасниками.

разом з:

* `config_id` (string, необов'язковий) - Унікальний ідентифікатор конфігурації сесії.

або:

* `flags` *(object, необов'язковий)* – Об'єкт JSON, що містить опції налаштування сесії.
* `steps` *(array, необов'язковий)* – Визначає послідовність кроків у процесі ідентифікації.

{% hint style="warning" %}
Використовуйте власні кроки та прапорці лише якщо у вас є дуже специфічні потреби, які неможливо задовольнити за допомогою конфігурацій. Із часом **ми рекомендуємо переносити всі власні потоки на конфігурації.**<br>

**Чому конфігурації важливі:**

* **Спрощує створення сесії** — не потрібно вручну визначати кроки та прапорці.
* **Зменшує ризик помилок** у потоці верифікації.
* **Захищено від застарівання** — застаріла обробка власних кроків з часом буде припинена.
* Дозволяє Identomat ефективно **підтримувати**, **покращувати** та **оптимізувати потоки**.
* Полегшує **інтеграцію**.
  {% endhint %}

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/begin/ \
    -F 'company_key=your-company-secret-key' \
    -F 'config_id=62412c096c4b39ba845d4bf2'
```

Перегляньте всі приклади **кроків** у [Посібнику для розробників.](/identomat-documentation-ukr/posibnik-dlya-rozrobnikiv/kyc-know-your-customer)

**Приклади параметрів запиту:**

*Запустити сесію за замовчуванням:*

```json
{
  "company_key": "your-company-secret-key"
}
```

*Запустити сесію з конфігурацією **(рекомендовано)**:*

```json
{
  "company_key": "your-company-secret-key",
  "config_id": "62412c096c4b39ba845d4bf2"
}
```

*Запустити сесію з прапорцями та кроками:*

```json
{
  "company_key": "your-company-secret-key",
  "flags": {},
  "steps": [],
  "parent_session_id": "98aryxvvzwpi4zuasth332ozfucli3l0qx13hisc"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
"47fjzxvvzapi4ztasth3c2ozfucli3l0qx13hisc"
```

***

**Поведінка перевизначення конфігурації**

При створенні сесії з `config_id` ви можете вибірково перевизначати частини збереженої конфігурації під час виконання. Це дозволяє зберігати конфігурації придатними для повторного використання, коригуючи поведінку для кожної сесії.

Підтримуються **два типи перевизначення**:

**1. Перевизначення кроків конфігурації**

Ви можете перевизначити один або декілька кроків із конфігурації, передавши масив `steps` у запиті `/begin`.

Будуть перевизначені лише ті кроки, які явно вказані в запиті. Усі інші кроки конфігурації залишаються незмінними.

Кроки зіставляються за їхнім `key`. Якщо крок із таким самим `key` вже існує в конфігурації, він буде **перевизначений** визначенням кроку, наданим у запиті.

Це зазвичай використовується для:

* Попереднього заповнення відповідей опитувальника (наприклад, ім'я, згода)
* Динамічного коригування вмісту кроку
* Введення даних, специфічних для користувача, у попередньо визначені потоки

> Якщо надано і `config_id`, і `steps`, конфігурація використовується як основа, і **перевизначаються лише відповідні кроки**.

*Приклад:*

{% code expandable="true" %}

```json
{
    "company_key": "your-company-secret-key",
    "config_id": "62412c096c4b39ba845d4bf2",
    "steps": [
        {
            "type": "user-questionnaire",
            "key": "agreement",
            "title": {
                "en": "Personal information"
            },
            "questions": [
                {
                    "mandatory": true,
                    "type": "string",
                    "key": "agreement-1",
                    "title": {
                        "en": "Your full name"
                    },
                    "answer": "John Doe"
                }
            ],
            "successButtonTitle": {
                "en": "Continue"
            }
        }
    ]
}
```

{% endcode %}

**2. Перевизначення параметрів конфігурації (загальні)**

Ви можете перевизначити параметри рівня конфігурації, передавши їх через об'єкт `general` у запиті `/begin`.

Будь-який параметр, наданий у `general`, **перевизначить відповідне значення з конфігурації** лише для цієї сесії. Параметри, які не надані, повернуться до значень конфігурації за замовчуванням.

Приклади параметрів, які можна перевизначити, включають:\
*(Див.* [*Налаштування конфігурації* ](/identomat-documentation-ukr/bezkodovii-konstruktor-robochikh-procesiv/nalashtuvannya-konfiguraciyi)*для повного списку та детальних описів усіх доступних параметрів)*

```json
{
  "language": "en",                                //Мова за замовчуванням
  "returnUrl": "https://www.identomat.com/",       //Return URL
  "optionalContinueOnAnotherDevice": false,        //Дозволити користувачу продовжити на іншому пристрої
  "restrictUrlSharing": false,                     //Обмежити поширення URL
  "switchDeviceUrl": "https://www.identomat.com/", //Передати користувацький QR URL 
  "skipDesktop": false,                            //Примусово перевести користувача на мобільний пристрій
  "useSmsNotifications": false,                    //Увімкнути SMS-сповіщення 
  "sessionLifetime": "15",                         //Тривалість сесії (хвилини)
  "identifyPersonWithFace": false,                 //Повторне розпізнавання обличчя 
  "checkScreening": true,                          //Скринінг 
  "minScreeningScore": "85",                       //Мінімальний бал скринінгу
  "screeningDatasets": ["default"],                //Набори даних для скринінгу
  "runScreeningAfter": "completion",               //Коли запускати скринінг
  "groups": ["667eb394d3ae73e1902da6dd"],          //Групи з доступом
  "requiredHdMedia": false                         //Вимагати FHD-камеру
}
```

Приклад запиту з використанням перевизначення параметрів:

```json
{
  "company_key": "your-company-secret-key",
  "config_id": "62412c096c4b39ba845d4bf2",
  "general": {
    "language": "ka",
    "useSmsNotifications": true,
    "sessionLifetime": "20"
  }
}
```

> Перевизначення параметрів застосовується **лише до створеної сесії** та не змінює збережену конфігурацію.

</details>

<details>

<summary>begin/ - Створення сесії (нове, з підтримкою запиту додаткової інформації)</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/begin</mark>](https://external-api.identomat.com/begin)

**Опис:**

Створює нову сесію верифікації за допомогою External API. На відміну від застарілого ендпоінту, цей ендпоінт використовує назви параметрів у форматі **camelCase** та підтримує конфігурації з увімкненим [**Запитом додаткової інформації**.](/identomat-documentation-ukr/koncepciyi-platformi/zapiti-dodatkovoyi-informaciyi)

Коли викликається з конфігурацією, у якої `additionalInformationRequest` встановлено як `true`, ендпоінт автоматично створює батьківську сесію (для оператора) та дочірню сесію (для заявника), повертаючи обидві у відповіді.

> Для нових інтеграцій цей ендпоінт рекомендовано замість застарілого ендпоінту `begin/`.

**Параметри:**

* `companyKey` *(string, обов'язковий)* – Секретний ключ компанії.
* `configId` *(string, необов'язковий)* – Унікальний ідентифікатор конфігурації сесії.
* `parentSessionId` *(string, необов'язковий)* – Вказує ID батьківської сесії при створенні дочірньої сесії для верифікації з декількома учасниками.
* `name` *(string, необов'язковий)* – Користувацька назва сесії.
* `scheduleStartTime` *(string, необов'язковий, ISO 8601)* – Запланований час початку сесії.
* `scheduleEndTime` *(string, необов'язковий, ISO 8601)* – Запланований час завершення сесії.
* `groupId` *(string, необов'язковий)* – Призначає сесію конкретній групі.
* `createdByUser` *(string, необов'язковий)* – ID користувача, що створює сесію.
* `clientUserId` *(string, необов'язковий)* – Користувацький ідентифікатор заявника з вашого боку, корисний для зв'язування сесій із вашими внутрішніми записами користувачів.
* `general` *(object, необов'язковий)* – Перевизначає параметри рівня конфігурації лише для цієї сесії. Див. [Налаштування конфігурації](/identomat-documentation-ukr/bezkodovii-konstruktor-robochikh-procesiv/nalashtuvannya-konfiguraciyi) для повного списку доступних параметрів.
* `flags` *(object, необов'язковий)* – Об'єкт JSON, що містить опції налаштування сесії.
* `steps` *(array, необов'язковий)* – Визначає або перевизначає послідовність кроків у потоці верифікації. Якщо використовується разом із `configId`, перевизначаються лише відповідні кроки.

Перегляньте всі приклади **кроків** у [Посібнику для розробників.](broken://pages/SVzyVTrIH54UIFRTRiDo)

{% hint style="warning" %}
Використовуйте власні кроки та прапорці лише якщо у вас є дуже специфічні потреби, які неможливо задовольнити за допомогою конфігурацій. Із часом **ми рекомендуємо переносити всі власні потоки на конфігурації.**<br>

**Чому конфігурації важливі:**

* **Спрощує створення сесії** — не потрібно вручну визначати кроки та прапорці.
* **Зменшує ризик помилок** у потоці верифікації.
* **Захищено від застарівання** — застаріла обробка власних кроків з часом буде припинена.
* Дозволяє Identomat ефективно **підтримувати**, **покращувати** та **оптимізувати потоки**.
* Полегшує **інтеграцію**.
  {% endhint %}

***

**Приклад cURL:**

```bash
curl -X POST https://external-api.identomat.com/begin \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "configId": "62412c096c4b39ba845d4bf2"
    }'
```

***

**Приклади параметрів запиту:**

*Створити стандартну сесію:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2"
}
```

*Створити сесію з запитом додаткової інформації:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2"
}
```

*Запросити додаткову інформацію для наявної сесії:*

```json
{
  "companyKey": "your-company-secret-key",
  "configId": "62412c096c4b39ba845d4bf2",
  "sessionId": "parent-session-id"
}
```

Коли надано `sessionId`, батьківська сесія залишається незмінною. **Створюється лише нова дочірня сесія** зі свіжим URL для заявника. Завжди діліться найновішим `additionalSessionUrl` із заявником.

***

**Приклади результату:**

*Стандартна конфігурація:*

```json
{
  "id": "session-id",
  "url": "https://widget.identomat.com/?session_token=session-id"
}
```

*Конфігурація з увімкненим `additionalInformationRequest`:*

```json
{
  "id": "parent-session-id",
  "url": "https://widget.identomat.com/?session_token=child-session-id",
  "additionalSessionId": "child-session-id",
  "additionalSessionUrl": "https://widget.identomat.com/?session_token=child-session-id"
}
```

***

**Поля відповіді:**

<table><thead><tr><th width="199.55859375">Поле</th><th>Опис</th></tr></thead><tbody><tr><td><code>id</code></td><td>ID батьківської сесії. Використовуйте це, щоб відстежувати сесію в Manage та отримувати колбеки.</td></tr><tr><td><code>url</code></td><td>URL для заявника дочірньої сесії. Дублює <code>additionalSessionUrl</code> для зворотної сумісності.</td></tr><tr><td><code>additionalSessionId</code></td><td>ID дочірньої сесії. Присутнє лише коли `additionalInformationRequest` увімкнено в конфігурації.</td></tr><tr><td><code>additionalSessionUrl</code></td><td>URL для заявника дочірньої сесії. Присутнє лише коли `additionalInformationRequest` увімкнено в конфігурації.</td></tr></tbody></table>

</details>

<details>

<summary>result/ - Результат сесії <strong>KYC (клієнта)</strong></summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/</mark>](https://widget.identomat.com/external-api/result/)

\
**Опис:**

Цей ендпоінт дозволяє отримати результат сесії верифікації. На основі ID сесії, відповідь поверне остаточне рішення (approved/rejected), дані документа, витягнуту інформацію та метадані.

**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
 curl https://widget.identomat.com/external-api/result/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади параметрів запиту:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "example-session-id-12345"
}
```

***

**📹 videoCallStatus:**

Якщо сесія включала **крок відеодзвінка**, ендпоінт `/result` включатиме масив `videoCallStatus`.\
Це дозволяє клієнтам відстежувати життєвий цикл кожної кімнати відеодзвінка — коли її було створено, коли вона завершилась, і коли складене відеофайл стає доступним.

**Приклад:**

```json
"videoCallStatus": [
  {
    "roomId": "RM27b1b047ccc30c0519959d66b4f0689d",
    "roomStatus": "ended",
    "compositionStatus": "available",
    "videoFileStatus": "available",
    "videoFileId": "hlwXVfonxNogXujgqT9anl1EphgwNiXuy7ug96sH"
  }
]
```

**Структура об'єкта:**

Кожен запис у `videoCallStatus` дотримується такої схеми:

```json
{
  "roomId": "string",
  "roomStatus": "created | ended | empty",
  "compositionStatus": "null | started | available",
  "videoFileStatus": "null | started | available",
  "videoFileId": "null | string"
}
```

**Опис статусів:**

<table><thead><tr><th width="169.7734375">Поле</th><th width="133.3046875">Можливі значення</th><th>Значення</th></tr></thead><tbody><tr><td><strong>roomStatus</strong></td><td><code>created</code></td><td>Кімнату успішно створено; дзвінок триває.</td></tr><tr><td></td><td><code>ended</code></td><td>Оператор завершив дзвінок.</td></tr><tr><td></td><td><code>empty</code></td><td>Кімната відеодзвінка завершилась без запису медіа.</td></tr><tr><td><strong>compositionStatus</strong></td><td><code>null</code></td><td>Композицію ще не розпочато.</td></tr><tr><td></td><td><code>started</code></td><td>Композицію (об'єднання відео) розпочато.</td></tr><tr><td></td><td><code>available</code></td><td>Складене повне відео готове.</td></tr><tr><td><strong>videoFileStatus</strong></td><td><code>null</code></td><td>Фінальний відеофайл ще не згенеровано.</td></tr><tr><td></td><td><code>started</code></td><td>Генерацію відеофайлу розпочато.</td></tr><tr><td></td><td><code>available</code></td><td>Фінальний завантажуваний відеофайл готовий.</td></tr><tr><td><strong>videoFileId</strong></td><td><code>null</code> або ID файлу</td><td>Якщо доступно, цей ID можна використати для завантаження складеного відео.</td></tr></tbody></table>

***

**Приклади результату:**

*<mark style="color:green;">sessionApproved:</mark>*

{% code expandable="true" %}

```json
{
    "result": "approved",
    "similarity": 0.9027283530404249,
    "live": false,
    "document_type": "id",
    "generalDocuments": [
        {
            "pages": [
                {
                    "typeId": "utility-bill",
                    "final": {
                        "street": "Main Street",
                        "state": "California",
                        "city": "Los Angeles",
                        "country": "United States",
                        "postalCode": "90001",
                        "streetNumber": "123",
                        "county": "Los Angeles County",
                        "countryCode": "USA",
                        "documentIssued": "1/15/2025",
                        "documentIssuedTime": "2025-01-15T00:00:00",
                        "authority": "Bank of America, NA",
                        "address": "123 Main St, Los Angeles, CA 90001",
                        "formattedAddress": "123 Main St, Los Angeles, CA 90001, USA",
                        "latitude": 34.052235,
                        "longitude": -118.243683,
                        "fullName": "John Doe",
                        "firstName": "John",
                        "lastName": "Doe",
                        "permanent": null
                    },
                    "documentPages": [
                        {
                            "pageNumber": 1
                        }
                    ],
                    "pageNumber": 1,
                    "statuses": []
                }
            ],
            "documentType": "UTILITY_BILL",
            "permanent": null,
            "typeId": "utility_bill"
        }
    ],
    "reject_reason": {
        "value": "",
        "description": ""
    },
    "result_comment": "",
    "name": "John Doe",
    "face_images": 1,
    "id_card_front": {
        "Given_Names_en_US": "John",
        "Surname_en_US": "Doe",
        "citizenship": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "123456789",
        "Date_of_Birth_en_US": "1/8/1980",
        "Date_of_Expiry_en_US": "8/9/2025",
        "Document_Number_en_US": "AB1234567",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-08T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2025-08-09T00:00:00.000Z"
    },
    "id_card_back": {
        "Date_of_Issue_en_US": "6/28/2021",
        "Issuing_State_Code_en_US": "USA",
        "Place_of_Birth_en_US": "USA",
        "Date_of_Issued_ISO": "2021-06-28T00:00:00.000Z",
        "Given_Names_en_US": "John",
        "Surname_en_US": "Doe",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "123456789",
        "Date_of_Birth_en_US": "1/8/1980",
        "Date_of_Expiry_en_US": "6/28/2028",
        "Document_Number_en_US": "AB0002261",
        "Nationality_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-08T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2028-06-28T00:00:00.000Z",
        "mrz": "IDUSAAB0002261938001085718<<<<\n8001081M2806288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<"
    },
    "suggested": {},
    "person": {
        "email": "johndoe@email.com",
        "phoneNumber": "+1234567890",
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "1/8/1980",
        "birthday_time": "1980-01-08T00:00:00.000Z",
        "age": 45,
        "citizenship": "USA",
        "document_number": "AB0002261",
        "document_expires": "6/28/2028",
        "document_expires_time": "2028-06-28T00:00:00.000Z",
        "personal_number": "123456789",
        "issuing_state": "USA",
        "sex": "M",
        "birth_place": "USA",
        "nationality": "USA",
        "document_issued": "6/28/2021",
        "document_issued_time": "2021-06-28T00:00:00.000Z",
        "status": "FIELDS_MATCH",
        "mrz": "IDUSAAB0002261938001085718<<<<\n8001081M2806288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<",
        "address": "2804 Fairway Dr, Cedar Hill, TX 75104, USA"
    },
    "questionnaires": [
        {
            "key": "agreement",
            "questions": [
                {
                    "key": "question1",
                    "answer": "John Doe"
                },
                {
                    "key": "question2",
                    "answer": "option4"
                },
                {
                    "key": "question3",
                    "answer": [
                        "option1",
                        "option2"
                    ]
                },
                {
                    "key": "question5",
                    "answer": 1
                },
                {
                    "key": "question6",
                    "answer": "readOnly answer"
                }
            ]
        }
    ],
    "geolocation": [
        {
            "key": "require_geolocation",
            "latitude": 34.05221168293059,
            "longitude": -118.24393094417908,
            "address": "123 Main St, Los Angeles, CA 90001, USA"
        }
    ],
    "technicalDetails": {
        "remoteAddress": "192.168.1.1",
        "userAgent": "PostmanRuntime/7.37.3",
        "countryCode": "US"
    },
    "videoCallStatus": [
        {
            "roomId": "RMf12391ce20597708d747587bdee8e715",
            "roomStatus": "ended",
            "compositionStatus": "available",
            "videoFileStatus": "available",
            "videoFileId": "av7YsrnDopwVmyzLtzkPKSiyWKVIaQDQZPtDfEq0"
        },
        {
            "roomId": "RM48170f8ee1235e27d5d09f8330b4f67f",
            "roomStatus": "empty",
            "compositionStatus": null,
            "videoFileStatus": null,
            "videoFileId": null
        }
    ]
}
```

{% endcode %}

*<mark style="color:red;">sessionRejected:</mark>*

{% code expandable="true" %}

```json
{
    "result": "rejected",
    "similarity": 0.59931052549619,
    "live": true,
    "document_type": "id",
    "generalDocuments": [
        {
            "pages": [
                {
                    "typeId": "utility-bill",
                    "final": {
                        "street": "Main Street",
                        "state": "California",
                        "city": "Los Angeles",
                        "country": "United States",
                        "postalCode": "90001",
                        "streetNumber": "123",
                        "county": "Los Angeles County",
                        "countryCode": "USA",
                        "documentIssued": "1/15/2025",
                        "documentIssuedTime": "2025-01-15T00:00:00",
                        "authority": "Bank of America, NA",
                        "address": "123 Main St, Los Angeles, CA 90001",
                        "formattedAddress": "123 Main St, Los Angeles, CA 90001, USA",
                        "latitude": 34.052235,
                        "longitude": -118.243683,
                        "fullName": "John Doe",
                        "firstName": "John",
                        "lastName": "Doe",
                        "permanent": null
                    },
                    "documentPages": [
                        {
                            "pageNumber": 1
                        }
                    ],
                    "pageNumber": 1,
                    "statuses": []
                }
            ],
            "documentType": "UTILITY_BILL",
            "permanent": null,
            "typeId": "utility_bill"
        }
    ],
    "reject_reason": {
        "value": "low_similarity",
        "description": "Low similarity"
    },
    "result_comment": "",
    "name": "John Doe",
    "errors": [
        "LOW_SIMILARITY"
    ],
    "face_images": 1,
    "id_card_front": {
        "Given_Names_en_US": "James",
        "Surname_en_US": "Smith",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1980",
        "Date_of_Issue_en_US": "5/30/2015",
        "Document_Number_en_US": "A12345678",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-01T00:00:00.000Z",
        "Date_of_Issued_ISO": "2015-05-30T00:00:00.000Z"
    },
    "id_card_back": {
        "Issuing_State_Code_en_US": "USA",
        "Authority_en_US": "Department of State",
        "Given_Names_en_US": "James",
        "Surname_en_US": "Smith",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1980",
        "Date_of_Expiry_en_US": "5/30/2025",
        "Document_Number_en_US": "A12345678",
        "Nationality_en_US": "USA",
        "Date_of_Birth_ISO": "1980-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2025-05-30T00:00:00.000Z",
        "mrz": "I<USA12345678<<<<<<<<<<<<<<<\n8001013M2505309USA<<<<<<<<<<<2\nSMITH<<JAMES<<<<<<<<<<<<<<<<<"
    },
    "suggested": {},
    "person": {
        "email": "johndoe@email.com",
        "phoneNumber": "+1234567890",
        "first_name": "James",
        "last_name": "Smith",
        "birthday": "1/1/1980",
        "birthday_time": "1980-01-01T00:00:00.000Z",
        "age": 45,
        "nationality": "USA",
        "document_number": "A12345678",
        "document_issued": "5/30/2015",
        "document_issued_time": "2015-05-30T00:00:00.000Z",
        "issuing_state": "USA",
        "sex": "M",
        "document_expires": "5/30/2025",
        "document_expires_time": "2025-05-30T00:00:00.000Z",
        "authority": "Department of State",
        "status": "FIELDS_MATCH",
        "mrz": "I<USA12345678<<<<<<<<<<<<<<<\n8001013M2505309USA<<<<<<<<<<<2\nSMITH<<JAMES<<<<<<<<<<<<<<<<<",
        "address": "123 Main St, Los Angeles, CA 90001, USA"
    },
    "questionnaires": [
        {
            "key": "agreement",
            "questions": [
                {
                    "key": "question1",
                    "answer": "John Doe"
                },
                {
                    "key": "question2",
                    "answer": "option4"
                },
                {
                    "key": "question3",
                    "answer": [
                        "option1",
                        "option2"
                    ]
                },
                {
                    "key": "question5",
                    "answer": 1
                },
                {
                    "key": "question6",
                    "answer": "readOnly answer"
                }
            ]
        }
    ],
    "geolocation": [
        {
            "key": "require_geolocation",
            "latitude": 34.05221168293059,
            "longitude": -118.24393094417908,
            "address": "123 Main St, Los Angeles, CA 90001, USA"
        }
    ],
    "technicalDetails": {
        "remoteAddress": "192.168.1.1",
        "userAgent": "PostmanRuntime/7.37.3",
        "countryCode": "US"
    },
    "videoCallStatus": [
        {
            "roomId": "RMf12391ce20597708d747587bdee8e715",
            "roomStatus": "ended",
            "compositionStatus": "available",
            "videoFileStatus": "available",
            "videoFileId": "av7YsrnDopwVmyzLtzkPKSiyWKVIaQDQZPtDfEq0"
        },
        {
            "roomId": "RM48170f8ee1235e27d5d09f8330b4f67f",
            "roomStatus": "empty",
            "compositionStatus": null,
            "videoFileStatus": null,
            "videoFileId": null
        }

}
```

{% endcode %}

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/ - Результат сесії <strong>KYB (бізнесу)</strong></summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/result</mark>](https://external-api.identomat.com/result)

\
**Опис:**

Використовуйте цей ендпоінт, щоб отримати результат сесії **KYB (верифікації бізнесу)**.

> Цей ендпоінт використовує новішу базову URL `external-api.identomat.com` та назви параметрів у форматі camelCase, на відміну від застарілого ендпоінту KYC.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
 curl https://external-api.identomat.com/result/ \
    -F 'companyKey={your-company-secret-key}' \
    -F 'sessionId={example-session-id-12345}'
```

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

***

**Структура відповіді**

Результати KYB повертаються в масиві `result.stepsResults`. Кожен запис відповідає кроку в потоці KYB.

<table><thead><tr><th width="174.73828125">Тип кроку</th><th>Опис</th></tr></thead><tbody><tr><td><code>company</code></td><td>Інформація про компанію, надана в потоці.</td></tr><tr><td><code>beneficiaries</code></td><td>Список UBO та представників (фізичних осіб чи компаній). Кожен окремий бенефіціар включає `sessionId` KYC, який можна отримати через ендпоінт KYC.</td></tr><tr><td><code>kyb-review</code></td><td>Фінальний статус перегляду та дані з довірених баз даних.</td></tr></tbody></table>

**Приклад результату:**

*за замовчуванням:*

{% code expandable="true" %}

```json
{
  "result": {
    "stepsResults": [
      {
        "key": "company",
        "type": "company",
        "result": {
          "companyName": "Acme Corp",
          "registrationNumber": "0000000000000",
          "registrationCountry": "United States",
          "taxId": "00000000",
          "dateOfIncorporation": "01/01/2010",
          "email": "contact@acme.com",
          "contactNumber": "+10000000000",
          "website": "www.acme.com",
          "companyEntityType": "Joint-stock company",
          "legalAddress": "123 Main Street",
          "countryCode": "US"
        },
        "status": "approved"
      },
      {
        "key": "beneficiaries-1",
        "type": "beneficiaries",
        "result": [
          {
            "entityType": "individual",
            "positions": ["shareholder", "representative"],
            "firstName": "John",
            "lastName": "Doe",
            "dateOfBirth": "01/01/1980",
            "ownershipPercentage": "25",
            "contactNumber": "+10000000000",
            "email": "john.doe@example.com",
            "sessionIds": ["example-kyc-session-id-0001"],
            "sessionUrl": "https://widget.identomat.com/?session_token=example-kyc-session-id-0001",
            "_id": "example-internal-id-0001"
          },
          {
            "entityType": "company",
            "positions": ["shareholder"],
            "companyName": "Partner Ltd",
            "registrationNumber": "000000000",
            "registrationCountry": "United Kingdom",
            "ownershipPercentage": "50",
            "contactNumber": "+44000000000",
            "email": "contact@partnerltd.com",
            "taxId": "000000000",
            "website": "www.partnerltd.com",
            "dateOfIncorporation": "01/01/2015",
            "sessionIds": ["example-kyc-session-id-0002"],
            "sessionUrl": "https://widget.identomat.com/?session_token=example-kyc-session-id-0002",
            "_id": "example-internal-id-0002"
          }
        ],
        "status": "approved"
      },
      {
        "key": "kyb-review",
        "type": "kyb-review",
        "status": "approved",
        "trustedDatabase": {
          "activityStatus": "ACTIVE",
          "companyName": "Acme Corp",
          "address": {
            "registeredOffice": {
              "streetName": "Main Street",
              "town": "New York",
              "zipCode": "10001"
            }
          },
          "lastUpdateTimestamp": 1777447248,
          "balanceSheets": {
            "last": {
              "year": 2023,
              "balanceSheetDate": "2023-12-31",
              "employees": 42,
              "netWorth": 500000.00,
              "totalAssets": 1200000.00
            },
            "all": [
              {
                "year": 2023,
                "balanceSheetDate": "2023-12-31",
                "employees": 42,
                "netWorth": 500000.00,
                "operatingRevenue": 800000.00,
                "equity": 360000.00,
                "totalAssets": 1200000.00
              },
              {
                "year": 2022,
                "balanceSheetDate": "2022-12-31",
                "employees": 38,
                "netWorth": 450000.00,
                "operatingRevenue": 750000.00,
                "equity": 320000.00,
                "totalAssets": 900000.00
              }
            ]
          }
        }
      }
    ],
    "technicalDetails": {
      "remoteAddress": "192.168.1.1",
      "userAgent": "Mozilla/5.0",
      "countryCode": "US"
    }
  }
}
```

{% endcode %}

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>delete/ - Видалення даних сесії</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/delete/</mark>](https://widget.identomat.com/external-api/delete/)

**Опис:**

Цей ендпоінт дозволяє остаточно видалити дані, пов'язані з конкретною сесією верифікації. Ця операція незворотна, і її слід використовувати з обережністю. Зазвичай використовується для дотримання політик зберігання даних або запитів на видалення даних користувача.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/delete/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={some_session_token}'
```

**Приклади параметрів запиту:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "defg"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
true
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>export-session-as-pdf - Експорт сесії</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/export-session-as-pdf</mark>](https://external-api.identomat.com/export-session-as-pdf)

**Опис:**

Цей ендпоінт дозволяє експортувати дані, пов'язані з конкретною сесією, у вигляді завантажуваного PDF-документа. Ви можете вибрати включення повних деталей сесії, результатів скринінгу та/або документів підтвердження адреси. Принаймні одна опція експорту має бути встановлена як `true`.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

Один із наведених нижче параметрів має бути встановлений як `true`, щоб операція виконалась:

* `exportSession` *(boolean, необов'язковий)* – Вказує, чи потрібно експортувати повні дані сесії.
* `exportScreening` *(boolean, необов'язковий)* – Визначає, чи включати результати скринінгу в експорт.
* `exportProofOfAddress` *(boolean, необов'язковий)* - Визначає, чи включати документи підтвердження адреси в експорт.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/export-session-as-pdf \    
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "exportSession": true,
  "exportScreening": false,
  "exportProofOfAddress": false
}
```

**Приклади результату:**

*за замовчуванням:*

```json
PDF document of session
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

### Доступ до даних та інше

Використовуйте ці ендпоінти для отримання медіа та метаданих, пов'язаних із сесією верифікації. Це включає зображення документів, знімки обличчя, відео перевірки живості, документи підтвердження адреси, журнали активності сесії, статистичні зведення та візуальні маркери документів.

<details>

<summary>result/card-front/ - Зображення лицьової сторони картки</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/card-front/</mark>](https://widget.identomat.com/external-api/result/card-front/)

**Опис:**

Цей ендпоінт повертає зображення лицьової сторони документа, що посвідчує особу, поданого під час сесії.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/card-front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату:**

*за замовчуванням:*

```
Card front side image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/card-back/ - Зображення зворотної сторони картки</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/card-back/</mark>](https://widget.identomat.com/external-api/result/card-back/)

**Опис:**

Цей ендпоінт повертає зображення зворотної сторони документа, що посвідчує особу, поданого під час сесії.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/card-back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату:**

*за замовчуванням:*

```
Card back side image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/passport/ - Зображення сторінки з фото паспорта</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/passport/</mark>](https://widget.identomat.com/external-api/result/passport/)

**Опис:**

Цей ендпоінт повертає зображення паспорта, поданого під час сесії.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/passport/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату:**

*за замовчуванням:*

```
Passport image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face/ - Зображення обличчя</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/face/</mark>](https://widget.identomat.com/external-api/result/face/)

**Опис:**

Цей ендпоінт повертає зображення обличчя користувача, знятого під час сесії верифікації.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/face/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату**:

*за замовчуванням:*

```
Face image
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face-video/ - Відео руху обличчя</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/face-video/</mark>](https://widget.identomat.com/external-api/result/face-video/)

**Опис:**

Цей ендпоінт повертає відео, використане під час перевірки живості в процесі верифікації особи.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/face-video/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату:**

*за замовчуванням:*

```
Face video
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/face-document/ - Селфі з ID</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/face-document/</mark>](https://widget.identomat.com/external-api/result/face-document/)

**Опис:**

Цей ендпоінт надає зображення, на якому користувач тримає свій документ, що посвідчує особу, поруч зі своїм обличчям.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/face-document/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}'
```

**Приклади результату:**

*за замовчуванням:*

```
Selfie with ID (image)
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>result/general-document/ - Зображення чи PDF підтвердження адреси</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/result/general-document/</mark>](https://widget.identomat.com/external-api/result/general-document/)

**Опис:**

Цей ендпоінт повертає документ підтвердження адреси чи інші загальні документи, подані під час сесії, такі як банківська виписка, рахунок за комунальні послуги чи водійське посвідчення.

\
**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `session_token` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.
* `typeId` *(string, обов'язковий)* – Ідентифікатор типу документа. Допустимі значення включають:
  * `bank-statement`
  * `utility-bill`
  * `vehicle-registration-certificate-front`
  * `vehicle-registration-certificate-back`
  * `drivers-license`

**Приклад cURL:**

```bash
curl https://widget.identomat.com/external-api/result/general-document/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'session_token={example-session-id-12345}' \
    -F 'typeId={example-type-id}'
```

**Приклади параметрів запиту:**

```json
{
  "company_key": "your-company-secret-key",
  "session_token": "defg",
  "typeId": "bank-statement"
}
```

**Приклади результату:**

*за замовчуванням:*

```
Image or PDF of document
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-session-main-document-face-photo - Отримати фото обличчя з основного документа</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-session-main-document-face-photo</mark>](https://external-api.identomat.com/get-session-main-document-face-photo)

**Опис:**

Цей ендпоінт дозволяє отримати фото обличчя з основного документа, пов'язаного з конкретною сесією.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-session-main-document-face-photo \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": "data:text/plain;base64String"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*notFound:*

```json
{  
    "argumentError": "face-photo-not-found"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>list-session-activities - Список активностей сесії</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/list-session-activities</mark>](https://external-api.identomat.com/list-session-activities)

**Опис:**

Цей ендпоінт отримує список активностей, пов'язаних із конкретною сесією.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-session-activities \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": [
    {
      "id": "6162636465666768696a6b6c",
      "type": "PAGE_LOADED",
      "time": "2021-12-29T11:30:39.086Z",
      "data": {}
    },
    {
      "id": "5ff45878f44e95bbf987a801",
      "type": "PAGE_LOADED",
      "time": "2011-12-29T11:30:39.086Z",
      "data": {}
    }
  ]
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-session-statistical-summary - Статистичне зведення сесії</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-session-statistical-summary</mark>](https://external-api.identomat.com/get-session-statistical-summary)

**Опис:**

Цей ендпоінт отримує статистичне зведення сесії, надаючи ключові метрики та відомості.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl -X POST https://external-api.identomat.com/get-session-statistical-summary \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"}'
```

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": [
    {
      "sessionStartDate": "2021-12-29T11:30:40.000Z",
      "sessionTimeSpan": 8000,
      "scanDocumentStartTime": "2021-12-29T11:30:41.000Z",
      "scanDocumentEndTime": "2021-12-29T11:30:43.000Z",
      "scanDocumentAttempts": 1,
      "scanDocumentFailReason": null,
      "livenessStartTime": "2021-12-29T11:30:45.000Z",
      "livenessEndTime": "2021-12-29T11:30:48.000Z",
      "livenessFailReasons": null,
      "sessionTerminationStep": null,
      "sessionTerminationReasons": null
    }
  ]
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-visual-markers - Отримати візуальні маркери документа</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-visual-markers</mark>](https://external-api.identomat.com/get-visual-markers)

**Опис:**

Цей ендпоінт отримує візуальні маркери з документа.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

```bash
curl -X POST 'https://external-api.identomat.com/get-visual-markers' \
    -H 'Content-Type: application/json' \
    -d '{
    "companyKey": "your-company-secret-key",
    "sessionId": "example-session-id-12345"
}'
```

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": "data:application/x-tar;base64,base64String"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

### AML-скринінг

Використовуйте ці ендпоінти для пошуку в глобальних базах даних скринінгу щодо санкцій, PEP, регуляторних дій та інших індикаторів ризику. Ви можете виконувати одноразові пошуки, отримувати детальні профілі та налаштовувати постійний моніторинг осіб, щоб отримувати сповіщення про зміну їхнього статусу скринінгу.

<details>

<summary>search-screening-person - Пошук особи в базах даних скринінгу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/search-screening-person</mark>](https://external-api.identomat.com/search-screening-person)

**Опис:**

Використовуйте цей ендпоінт для пошуку осіб у глобальних базах даних скринінгу, включно з санкціями, PEP (публічно значущими особами), регуляторними діями та іншим.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `query` *(object, обов'язковий)* – Параметри для запиту до бази даних.
  * `fullName` *(string, обов'язковий)* – Повне ім'я особи.
  * `birthdayTimeFrom` *(string, необов'язковий)* – Початкова дата та час діапазону дня народження у форматі ISO 8601.
  * `scoreThreshold` *(integer, обов'язковий)* – Мінімальний бал, необхідний для результатів запиту.
* `offset` *(integer, необов'язковий)* – Кількість елементів, які потрібно пропустити з початку результатів.
* `limit` *(integer, необов'язковий)* – Максимальна кількість елементів для повернення в результатах запиту.

**Глосарій об'єктів:**

* **`Sanctioned entity` (Санкціонований об'єкт)**: Компанії, фізичні особи чи інші об'єкти, які уряд визначив для заборони конкретних взаємодій із ними.
* **`Sanction-linked entity` (Об'єкт, пов'язаний із санкціями)**: Об'єкти, включно з компаніями та фізичними особами, які мають пряме відношення до санкціонованого об'єкта. Це також включає компанії, які є непрямими дочірніми підприємствами санкціонованих об'єктів, незалежно від відсотка володіння санкціонованого об'єкта.
* **`Counter-sanctioned entity` (Контрсанкціонований об'єкт)**: Об'єкти, внесені до санкційних списків недемократичних країн, часто спрямовані проти продемократичних активістів, журналістів та правозахисників.
* **`Debarred entity` (Виключений об'єкт)**: Компанії чи фізичні особи, виключені з державних закупівель, зазвичай через шахрайство при виконанні державного контракту.
* **`Politician (Politically Exposed Persons)` (Політик — публічно значуща особа)**: Особи, які нині чи раніше обіймали посаду з політичним впливом.
* **`Close associate` (Близький партнер)**: Члени сім'ї та ключові ділові партнери публічно значущих осіб (PEP). Ці особи часто використовуються як номінальні особи чи прикриття для приховування незаконних фінансових доходів.
* **`Person of Interest` (Особа інтересу)**: Особи, під підвищеною увагою через суспільний інтерес, які не відповідають загальним визначенням публічно значущих осіб і не є санкціонованими.
* **`Regulator action` (Регуляторна дія)**: Компанії, до яких застосовано примусові заходи з боку галузевого регуляторного органу.
* **`Regulator warning` (Регуляторне попередження)**: Компанії, внесені до списку попереджень чи сповіщень галузевим регуляторним органом.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/search-screening-person \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "query":
            {
            "birthdayTimeFrom":"1980-11-07T13:07:59.790Z",
            "fullName":"John Doe",
            "scoreThreshold":80
            },
        "offset":0,
        "limit":100
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "query": {
    "birthdayTimeFrom": "1980-11-07T13:07:59.790Z",
    "fullName": "John Doe",
    "scoreThreshold": 80
  },
  "offset": 0,
  "limit": 100
}
```

**Приклади результату:**

*за замовчуванням - немає результатів для особи:*

```json
{
    "result": []
}
```

*за замовчуванням - особу знайдено:*

```json
{
    "result": [
        {
            "score": 100,
            "name": "John Doe",
            "personId": "67137933a2176f0797f1e657",
            "entityType": "person",
            "topics": [
                "Sanctioned entity",
                "Wanted person",
                "Person of interest",
                "Politician"
            ]
        }
    ]
}
```

*companyMissing:*

```json
{
  "argumentError": "company-missing"
}
```

*accessDenied:*

```json
{
  "argumentError": "access-denied"
}
```

</details>

<details>

<summary>get-screening-person-details - Отримати деталі особи з баз даних скринінгу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-screening-person-details</mark>](https://external-api.identomat.com/get-screening-person-details)<br>

**Опис:**

Отримайте розширені дані профілю, посади, псевдоніми, санкції та інші метадані для конкретної особи, внесеної до баз даних скринінгу.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `personId` *(string, обов'язковий)* – Унікальний ідентифікатор особи.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-screening-person-details \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "personId":"example-person-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "personId": "example-person-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

{% code expandable="true" %}

```json
{
    "result": {
        "entityType": "person",
        "firstName": "John",
        "middleName": "Doe",
        "lastName": "Smith",
        "gender": "male",
        "birthdayTime": "1952-10-07",
        "nationality": "US",
        "extraDetails": [
            {
                "groupName": "Profile",
                "details": [
                    {
                        "detailName": "John Doe Smith",
                        "properties": [
                            {
                                "propertyName": "Position",
                                "value": [
                                    "President of US (2012-)",
                                    "chairperson",
                                    "party leader"
                                ],
                                "type": "list"
                            },
                            {
                                "propertyName": "Name",
                                "value": [
                                    "John Doe Smith",
                                    "约翰·多·史密斯",
                                    "Джон Доу Сміт",
                                    {
                                        "propertyName": "Alias",
                                        "value": [
                                            "John Smith"
                                        ],
                                        "type": "list"
                                    },
                                    {
                                        "groupName": "Position occupied",
                                        "details": [
                                            {
                                                "detailName": "President",
                                                "properties": [
                                                    {
                                                        "propertyName": "Name",
                                                        "value": [
                                                            "President of US",
                                                            "President"
                                                        ],
                                                        "type": "string"
                                                    },
                                                    {
                                                        "propertyName": "Start Date",
                                                        "value": [
                                                            "1999-08-16"
                                                        ],
                                                        "type": "date"
                                                    },
                                                    {
                                                        "propertyName": "End Date",
                                                        "value": [
                                                            "2000-05-07"
                                                        ],
                                                        "type": "date"
                                                    },
                                                    {
                                                        "propertyName": "Status",
                                                        "value": [
                                                            "active"
                                                        ],
                                                        "type": "string"
                                                    }
                                                ]
                                            },
                                            {
                                                "groupName": "Sanctions",
                                                "details": [
                                                    {
                                                        "detailName": "Department of Foreign Affairs and Trade",
                                                        "properties": [
                                                            {
                                                                "propertyName": "Start Date",
                                                                "value": [
                                                                    "2022-02-28"
                                                                ],
                                                                "type": "date"
                                                            },
                                                            {
                                                                "propertyName": "Authority",
                                                                "value": [
                                                                    "Department of Foreign Affairs and Trade"
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Program",
                                                                "value": [
                                                                    ""
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Entity",
                                                                "value": [
                                                                    "Q772247"
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Summary",
                                                                "value": [
                                                                    "Instrument of first designation and declaration: Autonomous Sanctions ....."
                                                                ],
                                                                "type": "string"
                                                            },
                                                            {
                                                                "propertyName": "Source Url",
                                                                "value": [
                                                                    "https://www.dfat.gov.au/international-relations/security/sanctions/Pages3/"
                                                                ],
                                                                "type": "url"
                                                            }
                                                        ]
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}

*companyMissing:*

```json
{
  "argumentError": "company-missing"
}
```

*accessDenied:*

```json
{
  "argumentError": "access-denied"
}
```

</details>

<details>

<summary>monitor-screening-query - Встановити особу на моніторинг</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/monitor-screening-query</mark>](https://external-api.identomat.com/monitor-screening-query)

**Опис:**

Увімкнути постійний моніторинг конкретної особи в базах даних скринінгу. Якщо особа вже на моніторингу, буде повернуто відповідну помилку.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `query` *(object, обов'язковий)* – Параметри для запиту до бази даних.
  * `fullName` *(string, обов'язковий)* – Прізвище особи.
  * `birthdayTimeFrom` *(string, необов'язковий)* – Початкова дата та час діапазону дня народження у форматі ISO 8601.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/monitor-screening-query \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key", 
        "query": 
            {
            "fullName": "John Doe",  
            "birthdayTimeFrom": "1982-11982-12-12T00:00:00Z"
            }
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "query": {
    "fullName": "John Doe",
    "birthdayTimeFrom": "1982-12-12T00:00:00Z"
  }
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": "64ad3b14090678e34512eab8"
}
```

*Уже на моніторингу:*

```json
{
    "argumentError": "already-exists"
}
```

</details>

<details>

<summary>remove-screening-query-from-monitoring - Видалити особу з моніторингу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/remove-screening-query-from-monitoring</mark>](https://external-api.identomat.com/remove-screening-query-from-monitoring)

**Опис:**

Видаляє особу з постійного моніторингу скринінгу, скасовуючи підписку на подальші оновлення чи сповіщення, пов'язані з цією особою.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `id` *(string, обов'язковий)* - ID запиту моніторингу.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/remove-screening-query-from-monitoring \
  -H 'Content-Type: application/json' \
  -d '{ 
      "companyKey": "your-company-secret-key", 
      "id": "64ad3b14090678e34512eab8"
      }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "id": "64ad3b14090678e34512eab8"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{ 
    "result": true
}
```

</details>

<details>

<summary>list-screening-monitoring-records - Список записів скринінгу, що моніторяться</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/list-screening-monitoring-records</mark>](https://external-api.identomat.com/list-screening-monitoring-records)

**Опис:**

Отримує список осіб, які наразі перебувають під моніторингом скринінгу. Це включає базові метадані, такі як ім'я, ID та, опційно, дату останнього оновлення.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `start` *(integer, необов'язковий)* – Кількість елементів, які потрібно пропустити з початку результатів.
* `limit` *(integer, необов'язковий)* – Максимальна кількість записів для повернення.
* `date` *(string, необов'язковий, формат ISO 8601)* – Фільтрує записи після конкретної дати. Якщо дату не вказано, буде повернено весь список.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-screening-monitoring-records \
  -H 'Content-Type: application/json' \
  -d '{
      "companyKey":"your-company-secret-key", 
      "start":0, 
      "limit": 50
      }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "start": 0,
  "limit": 50,
  "date":"2023-07-10T12:26:00.576Z
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": {
    "start": 0,
    "limit": 50,
    "total": 4,
    "data": [
      {"fullName":"John Smith1","id":"64ad3b14090678e34512eab8"},
      {"fullName":"John Smith2","id":"64ad3ef45fcf054afc73ebb4", "lastUpdatedDate": "2023-07-01T10:50:42.389Z"},
      {"fullName":"John Smith3","id":"64ad3f3a8b3f54aca29fc0a2", "lastUpdatedDate": "2023-07-20T10:50:42.389Z"},
      {"fullName":"John Smith4","id":"64ad3f3a8b3f54aca29fc0a3"}
    ]
  }
}
```

</details>

### **Керування чорним списком**

Використовуйте ці ендпоінти для керування внутрішнім чорним списком вашої компанії. Ви можете позначати осіб на основі ідентифікаційних атрибутів, таких як ім'я, номер документа чи особистий номер, а також отримувати чи видаляти записи за потреби. Перевірки чорного списку виконуються автоматично під час сесій верифікації.

<details>

<summary>add-blacklist-record - Додати особу до чорного списку</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/add-blacklist-record</mark>](https://external-api.identomat.com/add-blacklist-record)

**Опис:**

Додає особу до чорного списку на основі ідентифікаційних атрибутів, таких як ім'я, номер документа чи особистий номер.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `query` *(object of strings, обов'язковий)* - Об'єкт, що містить деталі запиту. **Має включати** `reason` та **принаймні одне з** наступного: `firstName`, `lastName`, `personalNumber`, `documentNumber`, `birthday`.
  * firstName (string, необов'язковий) - Ім'я особи.
  * lastName (string, необов'язковий) - Прізвище особи.
  * personalNumber (string, необов'язковий) - Особистий ідентифікаційний номер.
  * documentNumber (string, необов'язковий) - Номер документа (наприклад, з ID чи паспорта).
  * birthday (string, необов'язковий) - Дата народження у форматі ISO 8601 (наприклад, 1990-05-14).
  * reason (string, обов'язковий) - Причина внесення особи до чорного списку.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/add-blacklist-record' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "query": {
            "firstName": "John",
            "lastName": "Doe",
            "personalNumber": "12345678901",
            "documentNumber": "123ABC123",
            "birthday": "1980-01-01T00:00:00.000Z",
            "reason": "Reason for adding to blacklist",
            "notes" : "Fraud-related activity"
                }
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key",
    "query": {
        "firstName": "John",
        "lastName": "Doe",
        "personalNumber": "12345678901",
        "documentNumber": "123ABC123",
        "birthday": "1980-01-01T00:00:00.000Z",
        "reason": "Reason for adding to blacklist",
        "notes" : "Fraud-related activity"
    }
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": "64ad3b14090678e34512eab8"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*alreadyExists*

```json
{  
  "argumentError": "already-exists"
}
```

</details>

<details>

<summary>remove-blacklist-record - Видалити запис із чорного списку</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/remove-blacklist-record</mark>](https://external-api.identomat.com/remove-blacklist-record)

**Опис:**

Видаляє раніше доданий запис із чорного списку.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `id` (string, обов'язковий) - ID запису чорного списку.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/remove-blacklist-record' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "id": "682b09e4400b3a00067ebcf7"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key",
    "id": "682b09e4400b3a00067ebcf7"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": true
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
"argumentError": "invalid-company-key"
}
```

*idNotFound:*

```json
{  
  "argumentError": "not-found"
}
```

</details>

<details>

<summary>list-blacklist-records - Список усіх записів чорного списку компанії</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/list-blacklist-records</mark>](https://external-api.identomat.com/list-blacklist-records)

**Опис:**

Отримує всі записи чорного списку, пов'язані з компанією. Ви можете за бажанням фільтрувати записи за запитом, встановити пагінацію за допомогою `offset` та `limit`, або отримати повний список.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* query (object of strings, необов'язковий) - Необов'язкові поля фільтра:
  * `offset` (number, необов'язковий) - Кількість записів, які потрібно пропустити з початку.
  * `limit` (number, необов'язковий) - Максимальна кількість записів для повернення.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/list-blacklist-records' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": {
        "offset": 0,
        "limit": 100,
        "total": 1,
        "data": [
            {
                "firstName": "John",
                "lastName": "Doe",
                "documentNumber": "123ABC123",
                "personalNumber": "012345678901",
                "birthday": "1980-01-01T00:00:00.000Z",
                "notes": "Fraud-related activity",
                "reason": "Reason for adding to blacklist",
                "id": "64f4d0ec35f5bb20a8022012"
            }
        ]
    }
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
"argumentError": "invalid-company-key"
}
```

*noRecord:*

```json
{
    "result": {
        "offset": 0,
        "limit": 100,
        "total": 0,
        "data": []
    }
}
```

</details>

### **Відеодзвінок**

Використовуйте ці ендпоінти для керування та отримання даних із сесій відеодзвінків. Ви можете отримати доступ до знімків екрана, зроблених оператором під час дзвінка, отримати записані відеофайли та програмно завершити активний дзвінок.

<details>

<summary>get-video-call-shots - Знімки відеодзвінка</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-video-call-shots</mark>](https://external-api.identomat.com/get-video-call-shots)

**Опис:**

Отримує всі знімки екрана (shots), зроблені оператором під час сесії відеодзвінка. Ці зображення слугують частиною доказів, зібраних під час верифікації KYC.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-shots \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": "data:application/x-tar;base64,base64String"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>get-video-call-videos - Відео відеодзвінка</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-video-call-videos</mark>](https://external-api.identomat.com/get-video-call-videos)

**Опис:**

Отримує відеозаписи з сесії відеодзвінка.\
Ендпоінт підтримує два режими отримання:

1. **Пріоритетний (рекомендовано):** отримати **один відеофайл** за допомогою параметра `fileId`.
2. **Застарілий:** отримати **всі відеофайли одразу** (повертається у вигляді архіву `.tar`).

Використання `fileId` рекомендовано для кращої продуктивності, зменшеного розміру payload та підвищеної надійності.

**Параметри:**

**Обов'язкові**

* **companyKey** *(string)* — Секретний ключ компанії.
* **sessionId** *(string)* — Унікальний ідентифікатор сесії.

**Необов'язкові (рекомендовані)**

* **fileId** *(string)* — Унікальний ID відеофайлу, який ви хочете отримати.\
  Якщо надано, ендпоінт повертає **лише вказаний відеофайл** замість повного архіву.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-videos \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "fileId": "abc123xyz"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "fileId": "abc123xyz"
}
```

**Приклади результату:**

один файл:

```json
"result": {
    "contentType": "video/mp4"
  }
```

*всі файли:*

```json
"result": {
    "contentType": "application/x-tar"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*notFound:*

```json
{  
    "argumentError": "not-found"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>end-video-call - Завершити відеодзвінок для підключеного користувача</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/end-video-call</mark>](https://external-api.identomat.com/end-video-call)

**Опис:**

Вручну завершує активну сесію відеодзвінка для підключеного користувача. Цей ендпоінт зазвичай використовується системою для примусового закриття сесії, яка все ще триває.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-video-call-videos \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId":"example-session-id-12345"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345"
}
```

**Приклади результату:**

*за замовчуванням:*

```
{ }
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

</details>

### Вкладення опитувальника

Використовуйте ці ендпоінти для керування файлами, пов'язаними із запитаннями типу «вкладення» у кроках опитувальника. Файли можуть надходити з декількох джерел — завантажені користувачем під час сесії KYC, подані оператором у Manage, визначені статично в конфігурації, або завантажені програмно через API.

<details>

<summary>get-question-file - Отримати файл із запитання</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-question-file</mark>](https://external-api.identomat.com/get-question-file)

**Опис:**

Отримує файл, прикріплений до запитання в кроці опитувальника. Використовуйте цей ендпоінт для доступу до файлів незалежно від того, як вони були подані — це включає файли, завантажені **користувачем під час сесії KYC** та файли, подані **оператором у Manage**. Використовуйте `fileIndex` для посилання на конкретний файл, коли до одного запитання прикріплено декілька файлів.

\
**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* - Унікальний ідентифікатор сесії.
* `stepKey` *(string, обов'язковий)* – Унікальний ключ кроку опитувальника.
* `questionKey`*(string, обов'язковий)* – Унікальний ключ запитання в межах опитувальника.
* `fileIndex` *(integer, необов'язковий)* – Індекс файлу, коли до запитання завантажено декілька файлів. Використовується для посилання на конкретний файл у межах вкладень запитання.

**Приклад cURL:**

```bash
curl -X POST 'https://external-api.identomat.com/get-question-file' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "fileIndex": 0
}'
```

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1",
  "questionKey": "question-1",
  "fileIndex": 0
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": {
        "contentType": "application/pdf | image/png | image/jpeg"
    }
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

</details>

<details>

<summary>upload-file - Завантажити файл до запитання</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/upload-file</mark>](https://external-api.identomat.com/upload-file)

**Опис:**

Завантажує файл до конкретного запитання типу «вкладення» в межах кроку опитувальника. Файл має бути наданий у вигляді data URI, закодованого у base64. Повертає `fileId`, який можна використати для отримання чи видалення файлу пізніше.

**Підтримувані формати:**

* `data:application/pdf;base64,...`
* `data:image/jpeg;base64,...`
* `data:image/png;base64,...`

**Параметри:**

* `companyKey` *(string, обов'язковий)* — Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* — Унікальний ідентифікатор сесії.
* `stepKey` *(string, обов'язковий)* — Унікальний ключ кроку опитувальника.
* `questionKey` *(string, обов'язковий)* — Унікальний ключ запитання типу «вкладення».
* `content` *(string, обов'язковий)* — Вміст файлу у вигляді data URI, закодованого у base64 (наприклад, `data:image/png;base64,...`).

**Приклад cURL:**

```bash
curl -X POST https://external-api.identomat.com/upload-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "content": "data:image/png;base64,iVBORw0KGgo..."
    }'
```

**Приклад параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "content": "data:image/png;base64,iVBORw0KGgo..."
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

<details>

<summary>get-file - Отримати файл із запитання</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-file</mark>](https://external-api.identomat.com/get-file)

**Опис:**

Отримує файл, який був програмно завантажений через ендпоінт `upload-file`.

**Параметри:**

* `companyKey` *(string, обов'язковий)* — Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* — Унікальний ідентифікатор сесії.
* `stepKey` *(string, обов'язковий)* — Унікальний ключ кроку опитувальника.
* `questionKey` *(string, обов'язковий)* — Унікальний ключ запитання типу «вкладення».
* `filename` *(string, обов'язковий)* — ID файлу, повернутий `upload-file`.

**Приклад cURL:**

```bash
curl -X POST https://external-api.identomat.com/get-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
    }'
```

**Приклад параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
File stream
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

<details>

<summary>delete-file - Видалити файл із запитання</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/delete-file</mark>](https://external-api.identomat.com/delete-file)

**Опис:**

Остаточно видаляє раніше завантажений файл із запитання типу «вкладення». Ця операція незворотна.

**Параметри:**

* `companyKey` *(string, обов'язковий)* — Секретний ключ компанії.
* `sessionId` *(string, обов'язковий)* — Унікальний ідентифікатор сесії.
* `stepKey` *(string, обов'язковий)* — Унікальний ключ кроку опитувальника.
* `questionKey` *(string, обов'язковий)* — Унікальний ключ запитання типу «вкладення».
* `filename` *(string, обов'язковий)* — ID файлу, повернутий `upload-file`.

**Приклад cURL:**

```bash
curl -X POST https://external-api.identomat.com/delete-file \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "sessionId": "example-session-id-12345",
        "stepKey": "user-questionnaire-1a2b3c",
        "questionKey": "question-1",
        "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
    }'
```

**Приклад параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionId": "example-session-id-12345",
  "stepKey": "user-questionnaire-1a2b3c",
  "questionKey": "question-1",
  "filename": "9iomy86NuoOQnK7l2puTgiSapWf22xFwn6KRn4FG"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": true
}
```

*sessionNotFound:*

```json
{
  "argumentError": "session-not-found"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

</details>

### Інші методи

Використовуйте ці ендпоінти для керування групами, користувачами та конфігураціями сесій у Manage. Групи можна використовувати для контролю того, які оператори мають доступ до конкретних сесій. Ендпоінти керування користувачами дозволяють програмно створювати, переглядати список та видаляти користувачів платформи. Ви також можете отримати повні деталі конфігурації сесії за її ID.

<details>

<summary>list-groups - Список груп</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/list-groups</mark>](https://external-api.identomat.com/list-groups)

**Опис:**

Отримує список груп, пов'язаних із зазначеною компанією. Кожна група включає свій ID, назву, опис та список учасників.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-groups \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": [
        {
            "id": "650976e8dc32104b8bb1757e",
            "name": "Group name",
            "description": "Group description",
            "memberUserIds": [
                        "64f4d0ec35f5bb20a8022012",
                        "64f4d10435f5bb20a8022013",
                        "64f4d12335f5bb20a8022014"
              ]
        }
    ]
}
```

*noGroups:*

```json
{
  "result": []
}
```

*notFound:*

```json
{  
    "argumentError": "not-found"
}
```

</details>

<details>

<summary>make-group - Створити нову групу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/make-group</mark>](https://external-api.identomat.com/make-group)

**Опис:**

Створює нову групу користувачів у межах зазначеної компанії. Групу можна використати для керування правами доступу, призначення сесій чи організації користувачів.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `name` *(string, обов'язковий)* – Назва нової групи.
* `description` (string, необов'язковий) - Опис нової групи.
* `memberIds` *(array of strings, необов'язковий)* – Список ID користувачів для додавання до групи.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/make-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "name": "Group name",
        "description": "Group description",
        "memberIds": 
            [ 
            "user1-id", 
            "user2-id"
            ]
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key",
    "name": "Group name",
    "description": "Group description",
    "memberIds": [ "user1-id", "user2-id"
    ]
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": {
        "id": "6784c6d768cb9e8a891087e1"
    }
}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>change-group - Оновити наявну групу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/make-group</mark>](https://external-api.identomat.com/make-group)

**Опис:**

Дозволяє змінити наявну групу, оновивши її назву чи змінивши учасників групи. **Щоб зберегти наявних учасників у групі, ви маєте включити їхні ID до списку.**

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `groupId` *(string, обов'язковий)* – Унікальний ідентифікатор групи.
* `name` *(string, необов'язковий)* – Назва нової групи.
* `description` *(string, необов'язковий)* - Опис нової групи.
* `memberIds` *(array of strings, необов'язковий)* – Список ID користувачів для додавання чи видалення з групи. Щоб зберегти наявних учасників у групі, ви маєте включити їхні ID до списку.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/change-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "groupId": "64a50a0c6c2ff7f9a1f12833",
        "name": "Group 1",
        "description": "Group 1 description",
        "memberIds": 
            [ 
            "user1-id", 
            "user2-id"
            ]
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key",
    "groupId": "64a50a0c6c2ff7f9a1f12833",
    "name": "Group 1",
    "description": "Group 1 description",
    "memberIds": [ "user1-id", "user2-id"
    ]
}
```

**Приклади результату:**

*за замовчуванням:*

```
{}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>delete-group - Видалити групу</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/delete-group</mark>](https://external-api.identomat.com/delete-group)

**Опис:**

Дозволяє остаточно видалити групу із системи.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `groupId` *(string, обов'язковий)* – Унікальний ідентифікатор групи.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/delete-group' \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key",
        "groupId": "64b63613ad6f7ccaec256773"
    ]
}'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
    "companyKey": "your-company-secret-key",
    "groupId": "64b63613ad6f7ccaec256773"
    ]
}
```

**Приклади результату:**

*за замовчуванням:*

```
{}
```

*wrongParameter:*

```json
{
    "argumentError":"wrong-parameters",
    "errorSourceGroup":"service-module-server-external"
}
```

</details>

<details>

<summary>list-users - Список користувачів</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/list-users</mark>](https://external-api.identomat.com/list-users)

**Опис:**

Цей ендпоінт отримує список користувачів, пов'язаних із компанією.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/list-users \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey": "your-company-secret-key"
        }'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": [
        {
            "id": "user_id",
            "username": "user@identomat.com",
            "roles": [
                "administrator",
                "operator",
                "call_center_operator"
            ]
        }
    ]
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidAccess:*

```json
{
  "argumentError": "invalid-access"
}
```

</details>

<details>

<summary>create-user - Створити користувача</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/create-user</mark>](https://external-api.identomat.com/create-user)

**Опис:**

Створює нового користувача для платформи Identomat (Manage).

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `email` *(string, обов'язковий)* - Адреса електронної пошти нового користувача.
* `emailVerified` (boolean, необов'язковий) - Чи слід позначати email як підтверджений. За замовчуванням `false`.
* `password` (string, обов'язковий) - Пароль користувача (мінімум 8 символів).
* `firstName` (string, необов'язковий) - Ім'я користувача.
* `lastName` (string, необов'язковий) - Прізвище користувача.
* `rights` (array of strings, необов'язковий) - Список ролей для призначення користувачеві. Якщо не вказано, за замовчуванням `call_center_operator`. Допустимі значення:
  * `call_center_operator`
  * `operator`
  * `administrator`

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/create-user' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "email": "john.doe@example.com",
        "emailVerified": true,
        "password": "SecurePass123!",
        "firstName": "John",
        "lastName": "Doe",
        "rights": [
            "call_center_operator",
            "administrator",
            "operator"
    ]
}'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "email": "john.doe@example.com",
  "emailVerified": true,
  "password": "SecurePass123!",
  "firstName": "John",
  "lastName": "Doe",
  "rights": [
        "call_center_operator",
        "administrator",
        "operator"
    ]
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": "68243e94540d1e5fe6c04a0f"
}
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*invalidEmailFormat:*

```json
{
  "argumentError": "invalid-email-format"
}
```

*passwordTooShort*

```json
{
  "argumentError": "password-too-short"
}
```

*passwordIsNotString*

```json
{
  "internalError": Illegal arguments: number, string"
}
```

*invalidRights*

```json
{
  "argumentError": "invalid-rights"
}
```

*userAlreadyExists:*

```json
{
  "argumentError": "user-already-exists"
}
```

</details>

<details>

<summary>delete-user - Видалити користувача</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/delete-user</mark>](https://external-api.identomat.com/delete-user)

**Опис:**

Видаляє користувача з платформи Identomat (Manage).

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `userId` *(string, обов'язковий)* - Унікальний ідентифікатор користувача.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST 'https://external-api.identomat.com/delete-user' \
    -H 'Content-Type: application/json' \
    -d'{
        "companyKey": "your-company-secret-key",
        "userId": "68243e94540d1e5fe6c04a0f"
    ]
}'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "userId": "68243e94540d1e5fe6c04a0f"
}
```

**Приклади результату:**

*за замовчуванням:*

```
{ }
```

*wrongParameters:*

```json
{
  "argumentError": "wrong-parameters"
}
```

*invalidCompanyKey:*

```json
{
  "argumentError": "invalid-company-key"
}
```

*userNotFound:*

```json
{
  "argumentError": "user-not-found"
}
```

</details>

<details>

<summary>get-session-config - Отримати конфігурацію сесії</summary>

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/get-session-config</mark>](https://external-api.identomat.com/get-session-config)

**Опис:**

Цей ендпоінт отримує деталі конфігурації для конкретної конфігурації сесії на основі наданого ID конфігурації сесії.

**Параметри:**

* `companyKey` *(string, обов'язковий)* - Секретний ключ компанії.
* `sessionConfigId` *(string, обов'язковий)* – Унікальний ідентифікатор конфігурації сесії.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/get-session-config \
    -H 'Content-Type: application/json' \
    -d '{
        "companyKey":"your-company-secret-key",
        "sessionConfigId":"6162636465666768696a6b6c"
}'
```

{% endcode %}

**Приклади параметрів запиту:**

```json
{
  "companyKey": "your-company-secret-key",
  "sessionConfigId": "6162636465666768696a6b6c"
}
```

**Приклади результату:**

*за замовчуванням:*

```json
{
  "result": {
    "id": "679c74e4d9725987e3879265",
    "name": "Configuration Template",
    "general": {
        "language": "en",
        "sessionLifetime": 15
        },
    "steps": [
      {
        "title": {
          "en": "ID Verification"
        },
        "type": "identity-document",
        "key": "select_document_id",
        "flags": {
          "documentTypes": [
            "id",
            "passport",
            "driver_license",
            "residence_permit"
          ]
        }
      },
      {
        "title": {
          "en": "Liveness Check"
        },
        "type": "liveness",
        "key": "liveness",
        "flags": {
          "liveness": true,
          "maxLivenessAttempts": 3
        }
      }
    ]
  }
}

```

*wrongParameters:*

```
{
    "argumentError": "wrong-parameters"
}
```

</details>

### Обробка зображення

Використовуйте ці ендпоінти для витягування даних із зображень документів, що посвідчують особу, незалежно від сесії верифікації. Кожен ендпоінт приймає зображення JPEG та повертає структуровані дані, розібрані з документа. Кількість повернутих полів може відрізнятися залежно від типу документа та якості зображення.

<details>

<summary>card/front/ - Лицьова сторона ID-картки</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/card/front/</mark>](https://widget.identomat.com/external-api/card/front/)

**Параметри:**

* `company_key` *(string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/card/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Given_Names_en_US": "JOHN",
    "Surname_en_US": "DOE",
    "citizenship": "USA",
    "Sex_en_US": "M",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1990",
    "Date_of_Expiry_en_US": "1/1/2030",
    "Document_Number_en_US": "USA1234567",
    "Issuing_State_Code_en_US": "USA",
    "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
    "requestId": "abcdef1234567890abcdef1234567890",
    "person": {
        "first_name": "JOHN",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "citizenship": "USA",
        "document_number": "USA1234567",
        "document_expires": "1/1/2030",
        "document_expires_time": "2030-01-01T00:00:00.000Z",
        "personal_number": "1234567890",
        "issuing_state": "USA",
        "sex": "M"
    }
}
```

</details>

<details>

<summary>card/back/ - Зворотна сторона ID-картки</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/card/back/</mark>](https://widget.identomat.com/external-api/card/back/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/card/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example-image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Date_of_Issue_en_US": "6/28/2021",
    "Issuing_State_Code_en_US": "USA",
    "Place_of_Birth_en_US": "USA",
    "Date_of_Issued_ISO": "2021-06-28T00:00:00.000Z",
    "Given_Names_en_US": "JOHN DOE",
    "Surname_en_US": "DOE",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1990",
    "Date_of_Expiry_en_US": "6/28/2031",
    "Document_Number_en_US": "USA1234567",
    "Nationality_en_US": "USA",
    "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2031-06-28T00:00:00.000Z",
    "mrz": "IDUSA1234567938001085718<<<<\n8001081M2606288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<",
    "requestId": "abcdef1234567890abcdef1234567890",
    "person": {
        "first_name": "JOHN DOE",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "birth_place": "USA",
        "nationality": "USA",
        "document_number": "USA1234567",
        "document_issued": "6/28/2021",
        "document_expires": "6/28/2031",
        "document_expires_time": "2031-06-28T00:00:00.000Z",
        "document_issued_time": "2021-06-28T00:00:00.000Z",
        "personal_number": "1234567890",
        "issuing_state": "USA",
        "sex": "M",
        "mrz": "IDUSA1234567938001085718<<<<\n8001081M2606288USA<<<<<<<<<<<1\nDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<"
    }
}
```

</details>

<details>

<summary>license/front/ - Лицьова сторона водійського посвідчення</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/license/front/</mark>](https://widget.identomat.com/external-api/license/front/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/license/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Given_Names_ka_GE": "ჯონ",
    "Surname_ka_GE": "დო",
    "Personal_Number_en_US": "1234567890",
    "Date_of_Birth_en_US": "1/1/1985",
    "Date_of_Issue_en_US": "5/15/2015",
    "Document_Number_en_US": "ID1234567",
    "Issuing_State_Code_en_US": "USA",
    "Place_of_Birth_en_US": "Los Angeles",
    "Authority_en_US": "Department of Motor Vehicles",
    "Date_of_Birth_ISO": "1985-01-01T00:00:00.000Z",
    "Date_of_Issued_ISO": "2015-05-15T00:00:00.000Z",
    "Address_en_US": "456 Main St, Los Angeles, CA 90001",
    "Local_Address_en_US": "456 Main St, Los Angeles, CA 90001",
    "localAuthority": "Department of Motor Vehicles",
    "Drivers_License_Class_en_US": "C",
    "requestId": "a1b2c3d4e5f67890",
    "person": {
        "local_first_name": "ჯონ",
        "local_last_name": "დო",
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "1/1/1985",
        "birthday_time": "1985-01-01T00:00:00.000Z",
        "age": 40,
        "birth_place": "Los Angeles",
        "document_number": "ID1234567",
        "document_issued": "5/15/2015",
        "document_issued_time": "2015-05-15T00:00:00.000Z",
        "personal_number": "1234567890",
        "authority": "Department of Motor Vehicles",
        "local_authority": "Department of Motor Vehicles",
        "issuing_state": "USA",
        "address": "456 Main St, Los Angeles, CA 90001",
        "local_address": "456 ქუჩა, ლოს ანჯელესი, CA 90001"
    }
}
```

</details>

<details>

<summary>license/back/ - Зворотна сторона водійського посвідчення</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/license/back/</mark>](https://widget.identomat.com/external-api/license/back/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/license/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Issuing_State_Code_en_US": "USA",
    "requestId": "262f6ee39992e0a61769c5cc13b2f092",
    "person": {
        "issuing_state": "USA"
    }
}
```

</details>

<details>

<summary>residence/front/ - Лицьова сторона посвідки на проживання</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/residence/front/</mark>](https://widget.identomat.com/external-api/residence/front/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/residence/front/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Date_of_Birth_en_US": "5/15/1985",
    "Date_of_Expiry_en_US": "12/31/2030",
    "Document_Number_en_US": "D12345678",
    "Nationality_en_US": "USA",
    "Issuing_State_Code_en_US": "USA",
    "Date_of_Birth_ISO": "1985-05-15T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-12-31T00:00:00.000Z",
    "requestId": "1234567890abcdef1234567890abcdef",
    "person": {
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "5/15/1985",
        "birthday_time": "1985-05-15T00:00:00.000Z",
        "age": 40,
        "nationality": "USA",
        "document_number": "D12345678",
        "document_expires": "12/31/2030",
        "document_expires_time": "2030-12-31T00:00:00.000Z",
        "issuing_state": "USA",
        "sex": "M"
    }
}
```

</details>

<details>

<summary>residence/back/ - Зворотна сторона посвідки на проживання</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/residence/back/</mark>](https://widget.identomat.com/external-api/residence/back/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/residence/back/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "Date_of_Issue_en_US": "7/1/2020",
    "Issuing_State_Code_en_US": "ITA",
    "Place_of_Birth_en_US": "CITTA",
    "Date_of_Issued_ISO": "2020-07-01T00:00:00.000Z",
    "Given_Names_en_US": "John",
    "Surname_en_US": "Doe",
    "Nationality_Code_en_US": "USA",
    "Sex_en_US": "M",
    "Date_of_Birth_en_US": "5/15/1985",
    "Date_of_Expiry_en_US": "12/31/2030",
    "Document_Number_en_US": "D12345678",
    "Nationality_en_US": "USA",
    "Date_of_Birth_ISO": "1985-05-15T00:00:00.000Z",
    "Date_of_Expiry_ISO": "2030-12-31T00:00:00.000Z",
    "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nD12345678USA850515M3031232<<<<<<<<<<<<<<06",
    "requestId": "5924aa4e44eb394f7cd2377568c21859",
    "person": {
        "first_name": "John",
        "last_name": "Doe",
        "birthday": "5/15/1985",
        "birthday_time": "1985-05-15T00:00:00.000Z",
        "age": 40,
        "birth_place": "CITTA",
        "nationality": "USA",
        "document_number": "D12345678",
        "document_issued": "7/1/2020",
        "document_expires": "12/31/2030",
        "document_expires_time": "2030-12-31T00:00:00.000Z",
        "document_issued_time": "2020-07-01T00:00:00.000Z",
        "issuing_state": "ITA",
        "sex": "M",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nD12345678USA850515M3031232<<<<<<<<<<<<<<06"
    }
}
```

</details>

<details>

<summary>passport/ - Сторінка з фото паспорта</summary>

**URL:**

[<mark style="color:blue;">https://widget.identomat.com/external-api/passport/</mark>](https://widget.identomat.com/external-api/passport/)

**Параметри:**

* `company_key` (*string, обов'язковий)* - Секретний ключ компанії.
* `image` *(file, обов'язковий)* – Файл зображення JPEG для завантаження.

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl https://widget.identomat.com/external-api/passport/ \
    -F 'company_key={your-company-secret-key}' \
    -F 'image=@{example_image.jpg}'
```

{% endcode %}

**Приклад результату:**

*за замовчуванням:*

```json
{
    "mrzData": {
        "Given_Names_en_US": "JOHN",
        "Surname_en_US": "DOE",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Date_of_Birth_en_US": "1/1/1990",
        "Date_of_Expiry_en_US": "1/1/2030",
        "Document_Number_en_US": "USA1234567",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nUSA1234567USA9001019M3001019<<<<<<<<<<<<<<00"
    },
    "visualData": {
        "Given_Names_en_US": "JOHN",
        "Surname_en_US": "DOE",
        "Nationality_Code_en_US": "USA",
        "Sex_en_US": "M",
        "Personal_Number_en_US": "1234567890",
        "Date_of_Birth_en_US": "1/1/1990",
        "Date_of_Expiry_en_US": "1/1/2030",
        "Date_of_Issue_en_US": "1/1/2020",
        "Document_Number_en_US": "USA1234567",
        "Nationality_en_US": "USA",
        "Issuing_State_Code_en_US": "USA",
        "Place_of_Birth_en_US": "NEW YORK",
        "Authority_en_US": "USA AUTHORITY",
        "Date_of_Birth_ISO": "1990-01-01T00:00:00.000Z",
        "Date_of_Expiry_ISO": "2030-01-01T00:00:00.000Z",
        "Date_of_Issued_ISO": "2020-01-01T00:00:00.000Z"
    },
    "requestId": "1234567890abcdef1234567890abcdef",
    "person": {
        "first_name": "JOHN",
        "last_name": "DOE",
        "birthday": "1/1/1990",
        "birthday_time": "1990-01-01T00:00:00.000Z",
        "age": 34,
        "birth_place": "NEW YORK",
        "nationality": "USA",
        "document_number": "USA1234567",
        "document_issued": "1/1/2020",
        "document_expires": "1/1/2030",
        "document_expires_time": "2030-01-01T00:00:00.000Z",
        "document_issued_time": "2020-01-01T00:00:00.000Z",
        "personal_number": "1234567890",
        "authority": "USA AUTHORITY",
        "issuing_state": "USA",
        "sex": "M",
        "status": "FIELDS_MISMATCH",
        "mrz": "P<USADOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<\nUSA1234567USA9001019M3001019<<<<<<<<<<<<<<00"
    }
}
```

</details>

### Додаткова обробка

Використовуйте ці ендпоінти для самостійних біометричних операцій поза межами сесії верифікації. Наразі це включає порівняння облич, яке повертає бал схожості для двох наданих зображень облич.

<details>

<summary>compare-faces/ - Отримати бал схожості для двох облич</summary>

Мінімальний рекомендований розмір обличчя на зображенні — **80 пікселів**. Якщо розмір обличчя становить **65-79 пікселів**, буде повернуто код помилки разом із балом схожості.

**URL:**

[<mark style="color:blue;">https://external-api.identomat.com/compare-faces</mark>](https://external-api.identomat.com/compare-faces)

**Параметри:**

* `companyKey` (string, обов'язковий) - Секретний ключ компанії.
* `face1` *(file, обов'язковий)* - Файл зображення JPEG для обличчя1
* `face2` *(file, обов'язковий)* - Файл зображення JPEG для обличчя2

**Приклад cURL:**

{% code overflow="wrap" %}

```bash
curl -X POST https://external-api.identomat.com/compare-faces \
    -F 'companyKey={your-company-secret-key}' \
    -F 'face1=@{example_face1.jpg}' \
    -F 'face2=@{example_face2.jpg}'
```

{% endcode %}

**Приклади результату:**

*за замовчуванням:*

```json
{
    "result": {
        "similarity": 0.9399788229619534,
        "face1Statuses": [],
        "face2Statuses": []
    }
}
```

*error:*

```json
{
    "result": {
        "similarity": null,
        "face1Statuses": [
            "FACE_FAR_AWAY"
        ],
        "face2Statuses": []
    }
}
```

</details>


# Колбеки

Дізнайтеся, як отримувати та обробляти оновлення статусу в реальному часі та сповіщення про події з потоку верифікації за допомогою колбеків.

### Огляд

Колбеки дозволяють вашій системі отримувати сповіщення про події безпосередньо з платформи щоразу, коли відбуваються певні дії, такі як створення одноразового пароля (OTP), поширення сесії чи оновлення статусу.

Колбеки надсилаються як `POST`-запити на URL, визначений у ваших **налаштуваннях компанії**. Кожен колбек включає `callbackApiKey`, який можна використати для перевірки автентичності.

### Передумови

Щоб увімкнути колбеки, клієнти мають налаштувати такі параметри у своїх **налаштуваннях компанії**:

* **Callback URL** – ендпоінт, на який надсилатимуться дані колбеків.
* **Callback API key** – унікальний ключ для автентифікації та перевірки.

***

### Колбеки провайдера SMS

Якщо в налаштуваннях компанії обрано **власного SMS-провайдера клієнта**, система надсилає запити колбеків замість прямої доставки SMS. Клієнт тоді відповідає за надсилання SMS-повідомлень на основі отриманих даних колбека.

#### Подія колбека: **one-time-password**

**Опис:**\
Спрацьовує, коли одноразовий пароль (OTP) генерується та має бути надісланий кінцевому користувачу під час верифікації номера телефону.

**Вимоги:**

* Callback URL (обов'язково)
* Callback API key (обов'язково)

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "callback-api-key-123",
  "type": "one-time-password-request",
  "sessionId": "wwb83rh1se22wd81z0tx8bqlerljq5kgf6rxem1q",
  "text": "Your code is 6867",
  "phoneNumber": "+995512345678"
}
```

#### Подія колбека: **share-session-link-via-sms**

**Опис:**\
Спрацьовує, коли посилання на сесію надсилається користувачу через SMS із платформи Manage.

**Вимоги:**

* Callback URL (обов'язково)
* Callback API key (обов'язково)

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "share-session-link-via-sms",
  "sessionId": "ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "text": "Hello John Doe, please complete your verification using the link below.",
  "phoneNumber": "+995512345678",
  "sessionLink": "https://widget.identomat.com/?session_token=ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "createdBy": "operator@example.com"
}
```

***

### Колбеки провайдера email

Якщо ваша компанія використовує **власного провайдера клієнта** в налаштуваннях провайдера email, Identomat надсилатиме колбеки до вашої системи для надсилання листів.

#### Подія колбека: share-session-link-via-email

**Опис:**\
Спрацьовує, коли посилання на сесію верифікації поширюється через email із платформи Manage.

**Клієнт має надати:**

* Callback URL
* Callback API key

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "share-session-link-via-email",
  "sessionId": "5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
  "address": "john.doe@example.com",
  "subject": "Verification Required",
  "content": "Dear John Doe, please complete your verification using the link below.",
  "cc": "support@example.com",
  "sessionLink": "https://widget.identomat.com/?session_token=5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
  "createdBy": "operator@example.com"
}
```

#### Подія колбека: email-one-time-password-request

**Опис:**\
Спрацьовує, коли одноразовий пароль (OTP) генерується та має бути надісланий кінцевому користувачу під час верифікації email.

**Вимоги:**

* Callback URL (обов'язково)
* Callback API key (обов'язково)

**Приклад даних колбека:**

```json
{
    "callbackApiKey": "apikey123",
    "type": "email-one-time-password-request",
    "sessionId": "5alhw0070l2gy82q0mqlfniv7gwgbqqs0rtctolg",
    "address": "john.doe@example.com",
    "subject": "Mail Verification",
    "content": "Your code is 6867"
}
```

***

### Колбеки статусу сесії

Цей колбек не залежить від налаштувань провайдера.\
Він сповіщає клієнта щоразу, коли змінюється статус сесії.

#### Подія колбека: session-change

**Клієнт має надати:**

* Callback URL
* Callback API key

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "session-change",
  "sessionId": "ku2a5ldv4i13go76ftkych1je055nvyjtvjuurkp",
  "result": "APPROVED"
}
```

Поле `result` у колбеку `session-change` відображає поточний статус сесії. Можливі значення:

<table><thead><tr><th width="306.64453125">Значення</th><th>Опис</th></tr></thead><tbody><tr><td><code>APPROVED</code></td><td>Сесію затверджено.</td></tr><tr><td><code>REJECTED</code></td><td>Сесію відхилено.</td></tr><tr><td><code>MANUAL_CHECK</code></td><td>Сесія потребує ручного перегляду.</td></tr><tr><td><code>ADDITIONAL_INFORMATION_REQUESTED</code></td><td>Оператор запросив подальшу верифікацію у заявника.</td></tr></tbody></table>

**Сесії KYB**

Для сесій KYB дані включають додаткове поле `sessionType`:

```json
{
  "callbackApiKey": "apikey123",
  "type": "session-change",
  "sessionId": "65lfvkv1t2o25ozimqu3nh797umb1ydvkpltl3ib",
  "result": "APPROVED",
  "sessionType": "kyb"
}
```

> Якщо `sessionType` відсутнє, сесія є стандартною сесією KYC.

***

### Колбеки відеодзвінка

Ці колбеки спрацьовують під час процесу відеодзвінка та сповіщають клієнта про доступність чи відсутність записаних відеофайлів.

Колбек надсилається незалежно від того, чи було успішно створено відео.\
Це дозволяє клієнтам виявляти, коли кімната завершилась **без медіа**, або коли відеофайл стає **готовим для отримання**.

#### Подія колбека: **video-call-status-update**

**Опис:**\
Надсилається щоразу, коли кімната відеодзвінка змінює статус.\
Це включає випадки, коли:

* кімната відеодзвінка завершилась **без запису медіа** (`roomStatus: "empty"`), або
* відеофайл було успішно **створено та завантажено** (`videoFileStatus: "available"`).

**Клієнт має надати:**

* Callback URL
* Callback API key

{% hint style="info" %}
Цей колбек використовується для сповіщень у реальному часі, але повний та завжди актуальний статус відеодзвінка також доступний у полі **`videoCallStatus`** [ендпоінту **`/result`**.](/identomat-documentation-ukr/dovidnik-api#result-rezultat-sesiyi-kyc-kliyenta) Це дозволяє клієнтам опитувати `/result` або відновлювати стан, якщо якийсь колбек було пропущено.\
\
Коли запис стає доступним, ми наполегливо рекомендуємо отримувати його за допомогою параметра **`fileId`** [ендпоінту **`/get-video-call-videos`**.](/identomat-documentation-ukr/dovidnik-api#get-video-call-videos-video-videodzvinka)\
Використання `fileId` дозволяє вашій системі завантажувати відеофайли **по одному**, забезпечує кращий контроль над великими записами та уникає завантаження непотрібних файлів.

Завантаження всіх файлів в одному запиті все ще підтримується для зворотної сумісності, але **не рекомендується** для нових інтеграцій.
{% endhint %}

**Випадок 1 — Кімната завершилась без запису медіа**

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "video-call-status-update",
  "sessionId": "wtmfcr7tcj4q04co8mdg8yryou9glrcr2tbzm016",
  "roomId": "RM860d0a0272a619cdc0b4a855e75f8466",
  "roomStatus": "empty",
  "compositionStatus": null,
  "videoFileStatus": null,
  "videoFileId": null
}
```

**Випадок 2 — Відеофайл створено та готовий для отримання**

**Приклад даних колбека:**

```json
{
  "callbackApiKey": "apikey123",
  "type": "video-call-status-update",
  "sessionId": "ypsgyus3mosob3tugu3emgekqjykam5nvue1z1fu",
  "roomId": "RMc7eb8093d2461af50834f69e86692db3",
  "roomStatus": "ended",
  "compositionStatus": "available",
  "videoFileStatus": "available",
  "videoFileId": "hwenFYGlG54kRjmSruy3kxg54zV2pNPwHimseYao"
}
```

<table><thead><tr><th width="217.81640625">Поле</th><th>Опис</th></tr></thead><tbody><tr><td><strong>callbackApiKey</strong></td><td>Ключ, що використовується для автентифікації.</td></tr><tr><td><strong>type</strong></td><td>Завжди <code>"video-call-status-update"</code>.</td></tr><tr><td><strong>sessionId</strong></td><td>ID сесії верифікації.</td></tr><tr><td><strong>roomId</strong></td><td>Унікальний ідентифікатор кімнати відео.</td></tr><tr><td><strong>roomStatus</strong></td><td>Вказує статус кімнати (<code>empty</code>, <code>ended</code>).</td></tr><tr><td><strong>compositionStatus</strong></td><td>Статус файлу композиції, якщо є (<code>available</code>, <code>null</code>).</td></tr><tr><td><strong>videoFileStatus</strong></td><td>Вказує, чи готовий відеофайл (<code>available</code>, <code>null</code>).</td></tr><tr><td><strong>videoFileId</strong></td><td>Ідентифікатор завантаженого відеофайлу, якщо доступний.</td></tr></tbody></table>


# Запити додаткової інформації

Запитуйте додаткові кроки верифікації у заявників у межах наявної сесії, не втрачаючи історію аудиту.

### Як це працює

Коли оператор ініціює запит додаткової інформації, для заявника генерується нове посилання на верифікацію. Оператор надсилає його через Manage — за допомогою SMS, email, або копіюючи та надсилаючи посилання вручну. ID сесії, видимий у Manage, залишається незмінним протягом усіх запитів верифікації. Після відкриття посилання заявнику показуються лише **кроки, визначені в новому запиті верифікації.** Раніше завершені кроки не показуються заявнику, і їхні дані не змінюються. Рішення (автоматичні чи ручні) застосовуються лише до поточного запиту верифікації. Після завершення всіх кроків у запиті стандартний потік прийняття рішень виконується як зазвичай.

***

### Статус сесії

Для цієї функції введено новий статус сесії:

<table><thead><tr><th width="302.0625">Статус</th><th>Опис</th></tr></thead><tbody><tr><td><code>additional_information_requested</code></td><td>Сесію повернуто заявнику для подальшої верифікації. Знаходиться між кінцевим статусом та <code>in_progress</code>.</td></tr></tbody></table>

#### Переходи статусів:

```
approved / rejected / manual_check / expired
        ↓
additional_information_requested
        ↓ (заявник відкриває посилання)
in_progress
        ↓
approved / rejected / manual_check
```

***

### Історія верифікації

Сесія може пройти через декілька запитів верифікації протягом свого життєвого циклу. Кожен запит генерує власний набір кроків на основі обраної конфігурації. Якщо тип кроку було завершено в попередньому запиті, він генерується знову як нова спроба — повна історія зберігається та доступна для цілей аудиту. Для перегляду та прийняття рішень використовується остання спроба для кожного кроку.

***

### Увімкнення функції

* **Як увімкнути**: [Увімкніть це налаштування](/identomat-documentation-ukr/bezkodovii-konstruktor-robochikh-procesiv/nalashtuvannya-konfiguraciyi#zapit-dodatkovoyi-informaciyi) на вкладці **Configuration settings** конструктора конфігурацій.

```json
"sessionConfig": {
  "id": "6792031d9e97ea46872e190c",
  "name": "My Configuration",
  "additionalInformationRequest": true
}
```

Після увімкнення оператори побачать кнопку **Request more information** на відповідних сесіях у Manage.&#x20;

Конфігурації, доступні для вибору при створенні запиту, фільтруються за приналежністю оператора до групи, відповідно до правил контролю доступу, застосованих в інших частинах платформи.


# Document data review

Дозвольте кінцевим користувачам та операторам переглядати й виправляти витягнуті через OCR дані документа в межах сесії верифікації, з повним аудиторським слідом усіх змін.

### Overview

Коли документ сканується під час верифікації, дані витягуються автоматично через OCR. Функція перевірки даних документа дозволяє перевіряти та виправляти ці витягнуті дані — заявником, оператором, або обома — перед прийняттям остаточного рішення.

Усі редагування повністю логуються з мітками часу та інформацією про виконавця, зберігаючи повний аудиторський слід, доступний через активності сесії.

***

#### Ієрархія довіри джерела даних

Не всі поля редаговані. Система застосовує сувору ієрархію довіри на основі того, як були зчитані дані:

| Джерело        | Редаговане   |
| -------------- | ------------ |
| NFC            | Ніколи       |
| QR             | Ніколи       |
| MRZ            | Ніколи       |
| OCR            | Настроюється |
| Введено вручну | Настроюється |

Поля, заповнені з NFC, QR чи MRZ, є **постійно доступними лише для читання** незалежно від конфігурації. Це правило застосовується на рівні бекенду і не може бути перевизначене.

***

#### Настроювані поля

Наступні поля можна увімкнути для перегляду та виправлення:

* Ім'я (англійською)
* Ім'я (місцевою мовою)
* По батькові (англійською)
* По батькові (місцевою мовою)
* Прізвище (англійською)
* Прізвище (місцевою мовою)
* Ім'я батька (англійською)
* Ім'я батька (місцевою мовою)
* Дата народження
* Місце народження
* Стать
* Громадянство
* Національність
* Номер документа
* Орган видачі
* Дата закінчення терміну дії документа
* Дата видачі документа
* Країна видачі документа
* Особистий номер\*
* Адреса
* Область/штат

***

#### Увімкнення функції

Функція контролюється перемикачем **Enable document data editing** усередині **кроку ID verification** вашої конфігурації.

* **Через безкодовий конструктор робочих процесів:** Увімкніть перемикач у [налаштуваннях кроку ID verification](/identomat-documentation-ukr/bezkodovii-konstruktor-robochikh-procesiv/kroki-kyc#id-verification-verifikaciya-dokumenta-sho-posvidchuye-osobu). Після увімкнення стають доступними додаткові опції:
  * **Хто може редагувати** — лише заявник, лише оператор, або обидва
  * **Які поля редаговані** — для кожного поля, з налаштуваннями редаговане та обов'язкове
* **Через API — конфігурація кроку:** Поведінка перевірки налаштовується всередині кроку `identity-document` за допомогою об'єкта `review`. Див. Крок ID Verification у **Посібнику для розробників** для повного довідника з конфігурації.

***

#### Потік кінцевого користувача

Коли крок перевірки увімкнено, заявнику показується сторінка перегляду після сканування документа, де він може перевірити та виправити витягнуті дані.

**Коли показується сторінка перегляду:** Сторінка перегляду показується лише якщо принаймні одне поле редаговане, і принаймні одне з цих полів або порожнє, або не отримане з MRZ, NFC чи QR. Якщо всі редаговані поля були заповнені з довірених джерел, **крок перегляду автоматично пропускається.**

**Правила видимості полів:**

* Редаговані поля завжди показуються, попередньо заповнені, якщо дані були витягнуті
* Нередаговані поля, які заповнені, показуються як доступні лише для читання
* Нередаговані порожні поля не показуються

**Обов'язкові поля:** якщо поле позначено як обов'язкове, заявник має заповнити його перед продовженням.

**Поведінка скидання:** дані сторінки перегляду скидаються лише якщо заявник повторно сканує документ. Навігація назад і вперед без повторного сканування не скидає введені дані.

***

#### Потік оператора

Якщо редагування оператором увімкнено, оператори можуть переглядати та виправляти дані документа безпосередньо із сесії в Manage.

**Режим редагування:** Сесії відкриваються в режимі лише для читання за замовчуванням. Оператор натискає **Edit details**, щоб увійти в режим редагування, вносить виправлення, потім натискає **Save**, щоб зберегти зміни. Кнопка **Cancel** скасовує будь-які незбережені зміни.

**Ручна перевірка:** Збереження редагування автоматично переводить сесію в статус **Manual check**, вимагаючи остаточного рішення від оператора. Кнопка **Edit** доступна лише коли сесія не перебуває в статусі **Approved** чи **Rejected**. Якщо рішення щодо сесії вже прийнято, оператор має спочатку повернути її в статус Manual check, перш ніж редагування стане можливим.

***

#### Аудиторський слід

Кожне поле зберігає повну історію змін, включно з початковим значенням OCR, будь-якими редагуваннями користувача чи оператора, кінцевим значенням та мітками часу з інформацією про виконавця для кожної зміни.

Кожне поле в інтерфейсі сесії відображає **мітку джерела**, що вказує, звідки походить поточне значення — наприклад, `OCR`, `MRZ`, `NFC`, `User` чи `Operator`. Наведення курсора на мітку показує повну історію редагувань для цього поля.

Повний журнал активності, включно з усіма редагуваннями даних, можна отримати через [ендпоінт `list-session-activities`.](/identomat-documentation-ukr/dovidnik-api#list-session-activities-spisok-aktivnostei-sesiyi)


# Person data mapping

Збирайте та зіставляйте поля особи з Person data за допомогою кроку User questionnaire.

### **Як це працює**

Поля Person data — такі як ім'я, дата народження та особистий номер — зазвичай заповнюються автоматично через крок ID document за допомогою OCR, MRZ, NFC чи QR/Barcode-витягування. Person data mapping дозволяє клієнтам заповнювати ці самі поля через крок User questionnaire натомість, охоплюючи потоки, **де сканування документа не потрібне** або **де клієнт уже має деякі дані заявника.** Коли mapping увімкнено для кроку User questionnaire, окремі запитання можна пов'язати з конкретними полями Person data. Відповіді, надані заявником, заповнюють ці поля в розділі Person data сесії та стають доступними для подальших перевірок верифікації особи. Це універсальна функція, не прив'язана до жодного конкретного провайдера верифікації.

***

#### **Джерела полів та пріоритет**

Поля Person data можуть походити з декількох джерел у межах однієї сесії. Кожне поле відображає мітку джерела, щоб оператори могли визначити, звідки походить значення:

<table><thead><tr><th width="199.984375">Мітка</th><th>Джерело</th></tr></thead><tbody><tr><td><strong>OCR /</strong> <strong>MRZ</strong> / <strong>NFC / QR</strong></td><td>Автоматично витягнуто з документа через OCR, MRZ, NFC чи QR</td></tr><tr><td><strong>User review</strong></td><td>Відредаговано заявником під час перевірки даних документа після сканування</td></tr><tr><td><strong>User input</strong></td><td>Введено заявником в опитувальнику User questionnaire</td></tr><tr><td><strong>Client provided</strong></td><td>Попередньо встановлено клієнтом через API чи конфігурацію перед початком сесії</td></tr><tr><td><strong>Operator</strong></td><td>Введено чи виправлено оператором під час перевірки</td></tr></tbody></table>

Коли сесія включає і крок ID verification, і зіставлений крок User questionnaire, застосовується такий пріоритет:&#x20;

* Дані документа мають пріоритет над значеннями, зіставленими з опитувальника, для будь-якого поля, що перетинається.&#x20;
* Поля, не заповнені кроком документа, заповнюються значеннями, зіставленими з опитувальника.&#x20;
* Обидва значення зберігаються та видимі в деталях сесії.&#x20;

Історія змін поля доступна через підказку при наведенні на кожне поле та зберігається для всіх редагувань з метою аудиту.&#x20;

***

#### Маршрутизація сесії

Сесії з увімкненим «Map to Person data» автоматично направляються до **Manual check** після завершення, незалежно від результатів інших кроків.

***

#### Увімкнення функції

**Як увімкнути:** Увімкніть **Map to Person data** у налаштуваннях кроку User questionnaire в конструкторі конфігурацій.&#x20;

Після увімкнення під кожним сумісним запитанням з'являється селектор поля Person data. Не кожне запитання потрібно зіставляти — зіставлення необов'язкове для кожного запитання окремо.&#x20;

**Сумісні типи запитань та полів:**

<table><thead><tr><th width="241.25">Тип запитання</th><th>Поля Person Data, які можна зіставити</th></tr></thead><tbody><tr><td>Коротка відповідь (Вільний текст чи Число)</td><td>Ім'я, Прізвище, По батькові, Ім'я батька (англ./місцевою мовою), Місце народження, Номер документа, Особистий номер, Орган видачі, Адреса, Область/штат</td></tr><tr><td>Дата</td><td>Дата народження, Термін дії документа закінчується, Дата видачі документа</td></tr><tr><td>Radio</td><td>Стать</td></tr><tr><td>Випадаючий список</td><td>Громадянство, Національність, Країна видачі документа</td></tr></tbody></table>

Типи запитань Checkbox, File Upload та Attachment неможливо зіставити з полями Person data. Поле Person Data можна **зіставити лише з одним запитанням** у межах однієї конфігурації.


# AnyDoc reader

### **Огляд**

AnyDoc дозволяє клієнтам витягувати структуровані дані з **документів будь-якого типу** за допомогою ШІ — розрахункових листків, банківських виписок, рахунків за комунальні послуги, податкових декларацій, рахунків-фактур чи будь-яких інших документів, які не підпадають під заздалегідь визначені типи документів Identomat. Замість того, щоб покладатися на фіксований набір шаблонів документів, адміністратор визначає, які саме поля мають бути витягнуті з документа, а модель ШІ зчитує завантажений файл і повертає значення у структурованому, перевіреному форматі. Це робить AnyDoc придатним для специфічних для клієнта чи нестандартних документів, які не можуть бути охоплені звичайним потоком OCR. До одного потоку можна додати декілька кроків AnyDoc, кожен із яких налаштований незалежно для різного типу документа — наприклад, один крок для розрахункового листка та окремий крок для податкової декларації.

***

### **Як це працює**

1. Адміністратор налаштовує тип документа, його очікуваний формат та поля для витягування — кожне поле може включати мітку, ключ, тип даних та підказки для керування ШІ.
2. Коли заявник завантажує документ, система генерує запит на витягування на основі налаштованих полів та надсилає документ до ШІ.
3. ШІ повертає структуровану відповідь, що містить витягнуте значення кожного поля, нормалізовану версію цього значення та бал достовірності.
4. Витягнуті дані перевіряються відповідно до налаштованих типів полів (наприклад, дійсна дата, дійсний формат email) та відповідно до будь-яких налаштованих правил чинності документа.
5. Якщо обов'язкове поле відсутнє, не проходить перевірку, має низьку достовірність, або термін дії документа закінчився, сесія позначається.

***

#### **Дані, витягнуті для кожного поля**

Для кожного налаштованого поля система зберігає:

<table><thead><tr><th width="190.12890625">Властивість</th><th>Опис</th></tr></thead><tbody><tr><td>Значення (Value)</td><td>Нормалізоване, перевірене значення (наприклад, <code>EUR</code>, <code>2026-06-01</code>)</td></tr><tr><td>Необроблене значення (Raw value)</td><td>Значення точно так, як воно з'явилося в документі, до нормалізації (наприклад, <code>€</code>, <code>01 Jun 2026</code>)</td></tr><tr><td>Достовірність (Confidence)</td><td>Бал від 0 до 100, що вказує, наскільки ШІ впевнений у витягнутому значенні</td></tr><tr><td>Статус перевірки</td><td>Чи пройшло значення перевірку, не пройшло, чи не було знайдено</td></tr></tbody></table>

Зберігаються як необроблені, так і нормалізовані значення, тож оператори можуть бачити точно, що зчитав ШІ, порівняно з тим, як система це інтерпретувала.

***

#### Чинність документа&#x20;

Адміністратори можуть за бажанням встановити максимальний вік документа на основі дати, витягнутої з самого документа (наприклад, дата видачі чи дата виписки). Якщо витягнута дата виходить за межі налаштованого діапазону, документ вважається простроченим.&#x20;

***

#### Пороги достовірності

Поріг достовірності (за замовчуванням: 80) визначає, коли витягнуте поле вважається надійним. Будь-яке поле, витягнуте нижче цього порогу, позначається для ручного перегляду. Пороги можна встановити один раз для всього кроку, а також за бажанням перевизначити для окремих полів, які потребують суворішої точності (наприклад, сума зарплати проти референсного номера).&#x20;

***

#### Увімкнення функції

**Як увімкнути:** Додайте крок **AnyDoc** у конструкторі конфігурацій та визначте тип документа, дозволені формати, поля для витягування та будь-які правила чинності чи достовірності.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Через безкодовий конструктор робочих процесів:</strong><br>Налаштуйте крок безпосередньо в конструкторі конфігурацій.</td><td><a href="/pages/wnS2kgQxwY0UfEr5PVAH#anydoc-reader">/pages/wnS2kgQxwY0UfEr5PVAH#anydoc-reader</a></td></tr><tr><td><strong>Через API:</strong><br>Крок налаштовується за допомогою типу кроку <code>anydoc-reader</code>. Див. AnyDoc у <strong>Посібнику для розробників</strong> для повного довідника з конфігурації.</td><td><a href="/pages/k5L63NyPHDtlvo7uqhtA#anydoc-reader">/pages/k5L63NyPHDtlvo7uqhtA#anydoc-reader</a></td></tr></tbody></table>


# Android SDK

Ласкаво просимо до документації Identomat Android SDK! Тут ви знайдете все необхідне для безшовної інтеграції наших рішень з верифікації особи та KYC/AML у ваш Android-застосунок.

{% hint style="info" %}
Остання версія: **Version 1.1.188**
{% endhint %}

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-type="content-ref"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>Детальний посібник дивіться в нашій документації на <strong>GitLab</strong>.</td><td></td><td></td><td></td><td><a href="https://gitlab.identomat.com/world/identomat-example-app-android">https://gitlab.identomat.com/world/identomat-example-app-android</a></td><td></td></tr></tbody></table>

## Документація з інтеграції

Бібліотека Identomat пропонує потік ідентифікації користувача, що складається з різних кроків, поєднуючи типи документів із зображеннями чи відео користувача.

### Для початку сесії за допомогою API Identomat необхідні такі кроки

{% stepper %}
{% step %}
[Отримати токен сесії та налаштувати сесію](#id-1.-otrimati-token-sesiyi-ta-nalashtuvati-sesiyu)
{% endstep %}

{% step %}
[Отримати екземпляр Identomat SDK](#id-2.-otrimati-ekzemplyar-identomat-sdk-ta-peredati-dani)
{% endstep %}

{% step %}
[Передати токен сесії та обробити колбек](#id-3.-peredati-token-sesiyi-ta-obrobiti-kolbek)
{% endstep %}

{% step %}
[Запустити Identomat SDK](#id-4.-zapustiti-identomat-sdk)
{% endstep %}

{% step %}
[Передати додаткові змінні](#id-5.-peredati-dodatkovi-zminni)
{% endstep %}
{% endstepper %}

## 1. Отримати токен сесії та налаштувати сесію

Щоб почати сесію, спочатку потрібно отримати `session_token`, викликавши ендпоінт `begin/` та налаштувавши ваш потік верифікації.

> ⚠️ **Примітка:** Цей процес ідентичний для веб- та SDK-інтеграцій.

Повні деталі щодо генерації токена сесії, налаштування кроків та прапорців, а також запуску сесії див. у [**Посібнику з веб-інтеграції — ініціалізація сесії**.](/identomat-documentation-ukr/posibnik-dlya-rozrobnikiv)

Отримавши токен сесії, ви можете продовжити інтеграцію його у ваш потік SDK.

## 2. Отримати екземпляр Identomat SDK та передати дані

Основний клас Identomat SDK — це клас `IdentomatManager`.\
`IdentomatManager` — клас-синглтон в Identomat SDK (з використанням класу Kotlin `Object`).

Щоб отримати екземпляр SDK, ви можете зробити таке:

* **Для Java:**\
  Ви можете отримати екземпляр за допомогою:

```java
IdentomatManager identomatSdk = IdentomatManager.INSTANCE;
```

* **Для Kotlin:**\
  Ви можете використовувати його як `IdentomatManager`, що відноситься до класу Kotlin `Object`.

## 3. Передати токен сесії та обробити колбек

* **sessionToken** – Відповідь від API: тип `String`.

Щоб передати токен сесії, ми використовуємо функцію `setUp`, яку можна викликати так:

```java
IdentomatManager.INSTANCE.setUp(token: sessionToken);
```

Останній крок — передати функцію колбека, яка буде запущена після завершення взаємодії користувача з бібліотекою. Для цього використовуйте функцію `.setCallback`, яка приймає функцію як аргумент:

```java
IdentomatManager.INSTANCE.setCallback(() -> {
    // Go to result page;
});
```

## 4. Запустити Identomat SDK

Бібліотека надасть нам `Intent` для головної активності SDK, яку ми можемо запустити так:

```java
startActivity(IdentomatManager.INSTANCE.getIdentomatActivity(MainActivity.this));
```

## 5. Передати додаткові змінні

Для налаштування бібліотеки Identomat під застосунок у нас є декілька додаткових функцій:

1. `setColors(colors: Map)` - встановлює конкретні кольори
2. `setStrings(dict : Map)` - встановлює конкретні текстові рядки
3. `setVariables(variables : Map<String, Any?>)` - встановлює багато настроюваних змінних
4. `setLogo(() -> View?)` - встановлює анімацію завантаження, приймає функцію, яка повертає view, приклад використання:
5. `back_button_icon`- Змінює іконку кнопки «назад».
6. `primary_button_width` – Налаштовує ширину основної кнопки.
7. `primary_button_height` – Налаштовує висоту основної кнопки.
8. `liveness_smile_icon`– Змінює іконку посмішки перевірки живості. Приклад: *UIImage(named: "liveness\_smile\_icon")*

### Застарілі функції (Після версії 1.0.21)

Наступні функції застаріли після версії 1.0.21:

5.0 `skipLivenessInstructions()` - пропускає інструкції перевірки живості

5.1 `setLivenessIcons(neutralFace: Int, smileFace: Int)` - встановлює іконки перевірки живості, надсилайте int ресурсу так: `R.drawable.ic_liveness_neutral_icon`

5.2 `setLivenessRetryIcon(retryIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перевірки живості, size встановлює розмір іконки

5.3 `setRetryIcon(retryIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перегляду сканування документа, size встановлює розмір іконки

5.4 `setCameraDenyIcon(cameraDenyIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перегляду сканування документа

5.5 `setButtonCornerRadius(radius : Int)` - встановлює радіус закруглення кутів кожної кнопки

5.6 `setPanelElevation(elevation : Int)` - встановлює підняття панелей

***

### 1. Налаштування кольорів

Використовуйте функцію `setColors`, щоб налаштувати кольори в бібліотеці відповідно до теми застосунку. Передайте словник, що містить відповідні ключі кольорів та їхні відповідні шістнадцяткові значення:

```
"background",
"text_primary",
"text_secondary",
"text_placeholder",
"text_disabled",
"text_inverse",
"text_link",
"primary_color",
"neutral_color",
"danger_color",
"success_color",
"warning_color",
"black",
"white"
```

Приклад словника

* **для Java:**

```java
static HashMap colors = new HashMap(){{
    put("background", "#222222");
    put("text_primary", "#A4A4A4");
    put("text_secondary", "#676767");
    put("text_placeholder", "#7848FF");
    put("text_disabled", "#A4A4A4");
    put("text_inverse", "#676767");
    put("text_link", "#7848FF");
    put("primary_color", "#FFFFFF");
    put("neutral_color", "#222222");
    put("danger_color", "#FFFFFF");
    put("success_color", "#2D2D2D");
    put("warning_color", "#FFFFFF");
}};
```

* **для Kotlin:**

```kotlin
var colors : Map<String, String> = mapOf(
    "background" to "#222222",
    "text_primary" to "#FFFFFF",
    ...
    )
```

Спосіб передачі кольорів у бібліотеку: `IdentomatManager.setColors(colors: colors)`

### 2. Налаштування рядків

Щоб налаштувати рядки, які бібліотека відображає в конкретних місцях, у нас є функція `setStrings(string: Map)`.

Функція `setStrings` приймає `Map`, де ключі відповідають ідентифікаторам рядків, що використовуються в бібліотеці, а значення — рядки, які ви хочете відображати для різних мов. Структура виглядає так:

**Приклад для Java:**

```java
static HashMap strings = new HashMap(){{
    put("en",  new HashMap<String, String>() {{
        put("identomat_agree", "Yes I agree");
        put("identomat_disagree", "Disagree");
    }});
    put("ru",  new HashMap<String, String>() {{
        put("identomat_agree", "Согласен");
        put("identomat_disagree", "Не согласен");
    }});
    put("es",  new HashMap<String, String>() {{
        put("identomat_agree", "Acepto");
        put("identomat_disagree", "No acepto");
    }});
    put("ka",  new HashMap<String, String>() {{
        put("identomat_agree", "ვეთანხმები");
        put("identomat_disagree", "არ ვეთანხმები");
    }});
}};
```

**для Kotlin:**

```kotlin
 var strings : Map<String, Map<String,String>> = mapOf(
            "en" to mapOf(
                    "identomat_agree" to "Yes I agree",
                    "identomat_disagree" to "Disagree",
            ),
            "ru" to mapOf(
                    "identomat_agree" to "Согласен",
                    "identomat_disagree" to "Не согласен",
            ),
            "es" to mapOf(
                    "identomat_agree" to "Acepto",
                    "identomat_disagree" to "No acepto",
            ),
            "ka" to mapOf(
                "identomat_agree" to "ვეთანხმები",
                "identomat_disagree" to "არ ვეთანხმები",
            )
    )
```

Кожен рядок має свій власний ключ у бібліотеці, і його можна змінити. Список ключів рядків наведено в кінці.

### 3. Налаштування змінних

Для будь-якого іншого налаштування ми використовуємо функцію `setVariables(variables: Map<String, Any?>)`, куди ми передаємо мапу пар ключ-значення змінних.

Структура мапи виглядає так:

```
var variables : MutableMap<String, Any?> = mutableMapOf(
   
    "liveness_neutral_icon" to R.drawable.ic_liveness_neutral_icon,     -- sets liveness neutral face icon.     type -> int
    "liveness_smile_icon" to R.drawable.ic_liveness_smile_icon,         -- sets liveness smile face icon.       type -> int

    "liveness_retry_icon" to R.drawable.image,                          -- sets liveness retry page icon.       type -> int
    "liveness_retry_text_icon_1" to R.drawable.image,                   -- sets liveness retry page instruction icon 1.       type -> int
    "liveness_retry_text_icon_2" to R.drawable.image,                   -- sets liveness retry page instruction icon 2.       type -> int
    "liveness_retry_text_icon_3" to R.drawable.image,                   -- sets liveness retry page instruction icon 3.       type -> int
    "liveness_retry_text_icon_4" to R.drawable.image,                   -- sets liveness retry page instruction icon 4.       type -> int

    "scan_retry_icon" to R.drawable.image,                              -- sets scan document retry page icon.  type -> int
    "camera_deny_icon" to R.drawable.image,                             -- sets camera deny page icon.          type -> int
    "upload_retry_icon" to R.drawable.image,                            -- sets upload retry page icon.         type -> int

    "liveness_retry_icon_size" to 200,                                  -- sets save icon sizes.                type -> int
    "scan_retry_icon_size" to 200,
    "camera_deny_icon_size" to 200,
    "upload_retry_icon_size" to 200,
    
    "location_instruction_icon_1" to R.drawable.image,  
    "location_instruction_icon_2" to R.drawable.image,  

    "geolocation_icon" to R.drawable.image,  
    "geolocation_success_icon" to R.drawable.image,  
    "geolocation_deny_icon" to R.drawable.image,  

    "liveness_retry_count" to 3,                        -- new liveness video upload retry count

    "skip_liveness_instructions" to false,              -- skips liveness instructions                          type -> boolean
    "liveness_type" to 1,                               -- chooses liveness icons display type values 1 or 2    type -> int
    "button_corner_radius" to null,                     -- sets button corner radious, if it's null button will be round cornered              
    "panel_elevation" to 1,                             -- sets panels elevation,                               type -> int

    "liveness_info_main_icon" or "liveness_info_main_anim",      -- instruction page  
    "liveness_frame_face_icon" or "liveness_frame_face_anim",    -- frame page
    "instruction_smile_icon" or "instruction_smile_anim"         -- Liveness processing page 
    
    //Sets  font sizes
    "title_medium_size" to 16,
    "title_small_size" to 14,
    "headline_medium_size" to 28,
    "headline_small_size" to 24,
    "body_medium_size" to 16,
    "body_small_size" to 14
 
    //Sets font
    "title_font" to "font-name",
    "headline_font" to "font-name",
    "body_font" to "font-name"
    
    "default_country_code" to "GE"                      -- sets default country for country code picker
)
```

Ключі рядків (залишено англійською, оскільки це значення за замовчуванням у файлі ресурсів коду):

```xml
<resources>

  //ID verification
  <string name="identomat_select_document">Select document</string>
 
  <string name="identomat_card">ID card</string>
  <string name="identomat_card_front_instructions">Scan FRONT SIDE of ID CARD</string>
  <string name="identomat_card_front_upload">Upload FRONT SIDE of ID CARD</string>
  <string name="identomat_card_rear_instructions">Scan BACK SIDE of ID CARD</string>
  <string name="identomat_card_rear_upload">Upload BACK SIDE of ID CARD</string>
 
  <string name="identomat_driver_license">Driver license</string>
  <string name="identomat_driver_license_front_instructions">Scan FRONT SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_front_upload">Upload FRONT SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_rear_instructions">Scan BACK SIDE of DRIVER LICENSE</string>
  <string name="identomat_driver_license_rear_upload">Upload BACK SIDE of DRIVER LICENSE</string>
   
  <string name="identomat_passport">Passport</string>
  <string name="identomat_passport_instructions">Passport photo page</string>
  <string name="identomat_passport_upload">Upload passport photo page</string>
   
  <string name="identomat_residence_permit">Residence permit</string>
  <string name="identomat_residence_permit_front_instructions">Scan FRONT SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_front_upload">Upload FRONT SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_rear_instructions">Scan BACK SIDE of RESIDENCE PERMIT</string>
  <string name="identomat_residence_permit_rear_upload">Upload BACK SIDE of RESIDENCE PERMIT</string>
   
  <string name="identomat_capture_method_title">Choose a method</string>
  <string name="identomat_take_photo">Take a photo</string>
  <string name="identomat_upload_file">Upload a file</string>
  <string name="identomat_upload_another_file">Upload another file</string>
   
  <string name="identomat_upload_instructions_1">Upload a color image of the entire document</string>
  <string name="identomat_upload_instructions_2">JPG or PNG format only</string>
  <string name="identomat_upload_instructions_3">Screenshots are not allowed</string>
  <string name="identomat_choose_file">Choose a file</string>
   
  <string name="identomat_verifying">Verifying...</string>
  <string name="identomat_uploading">Uploading...</string>
   
  <string name="identomat_scan_retry_title">Capture failed</string>
  <string name="identomat_scan_retry_instruction">Please try again in better lighting</string>
  <string name="identomat_scan_retry_again">Try again</string>
  <string name="identomat_upload_success">Successfully uploaded!</string>
   
  <string name="identomat_no_document_in_image">Frame your document</string>
  <string name="identomat_document_align">Frame your document</string>
  <string name="identomat_document_blurry">Document is blurry</string>
  <string name="identomat_document_face_blurry">Face on document is blurry</string>
  <string name="identomat_document_face_require_brighter">Low light</string>
  <string name="identomat_document_face_too_bright">Avoid direct light</string>
  <string name="identomat_document_move_away">Please move document away</string>
  <string name="identomat_document_move_closer">Please move document closer</string>
  <string name="identomat_document_move_down">Please move document down</string>
  <string name="identomat_document_move_left">Please move document to the left</string>
  <string name="identomat_document_move_right">Please move document to the right</string>
  <string name="identomat_document_move_up">Please move document up</string>
  <string name="identomat_document_covered">Document is covered</string>
  <string name="identomat_document_grayscale">Document is grayscale</string>
  <string name="identomat_document_type_mismatch">Wrong document</string>
  <string name="identomat_document_not_readable">Document not readable</string>
  <string name="identomat_document_face_align">Document face align</string>
  <string name="identomat_document_spoofing_detected2">Document spoofing detected</string>
  <string name="identomat_document_page_mismatch">Wrong page</string>
  <string name="identomat_document_nfc_chip_damaged">Document NFC chip damaged</string>
   
   
  //Passive liveness
  <string name="identomat_face_instructions">Place your FACE within OVAL</string>
  <string name="identomat_processing">Processing, please wait</string>
   
   
  // Active liveness
  <string name="identomat_record_begin_section_1">Take a neutral expression</string>
  <string name="identomat_record_begin_section_2">Smile on this sign</string>
  <string name="identomat_record_begin_section_3">Take a neutral expression again</string>
  <string name="identomat_record_begin_title">Get ready for your video selfie</string>
  <string name="identomat_record_instructions">Place your FACE within OVAL and follow the on-screen instructions</string>
  <string name="identomat_im_ready">I\'m ready</string>
  <string name="identomat_neutral_expression">Neutral face</string>
  <string name="identomat_smile">Smile</string>
   
   
  // Adaptive liveness
 <string name="identomat_passive_record_begin_title">Get ready for your video selfie</string>
 <string name="identomat_passive_record_begin_subtitle">Follow the on-screen instructions when prompted.</string>
 <string name="identomat_passive_record_begin_subtitle_smile">When prompted, repeat the facial expression shown on the icons.</string>
 <string name="identomat_passive_record_begin_section_title">Tips</string>
 <string name="identomat_passive_record_begin_section_1">Frame your face</string>
 <string name="identomat_passive_record_begin_section_2">Hold still until success notify</string>
 <string name="identomat_smile">Smile</string>
 <string name="identomat_im_ready">I\'m ready</string>
   
   
  //Cascading liveness
  <string name="identomat_cascading_instructions">When prompted, repeat the facial expression shown on the icons: \n\n<b>• Keep neutral face \n• Smile</b></string>
  <string name="identomat_cascading_instructions_title">When prompted, repeat the facial expression shown on the icons:</string>
  <string name="identomat_cascading_instructions_1">• Keep neutral face</string>
  <string name="identomat_cascading_instructions_2">• Smile</string>
  <string name="identomat_cascading_button">Start Liveness Check</string>
  <string name="identomat_cascading_neutral_face">Keep neutral face</string>
  <string name="identomat_cascading_start">Position your face!</string>
  <string name="identomat_cascading_smile">Smile!</string>
  <string name="identomat_cascading_fail">Liveness Failed</string>
  <string name="identomat_cascading_success">That\'s it!</string>
   
  <string name="identomat_liveness_retry_title">We can\'t detect your face</string>
  <string name="identomat_liveness_retry_instruction">But first, please take a look at the instructions</string>
  <string name="identomat_liveness_retry_again">Try again</string>
  <string name="identomat_liveness_retry_instruction_1">Make sure to be in a place with good lighting</string>
  <string name="identomat_liveness_retry_instruction_2">Make sure your eyes are clearly visible</string>
  <string name="identomat_liveness_retry_instruction_3">Make sure to remove masks or other items that cover your face. Eyeglasses are okay</string>
  <string name="identomat_liveness_retry_instruction_4">Make sure to only show your face, we don't need to see your ID</string>
   
  <string name="identomat_lets_try">Let\'s try</string>
   
  <string name="identomat_low_neutral_frequency">Untimely smile detected</string>
  <string name="identomat_not_smile">Smile not detected</string>
  <string name="identomat_eyes_closed">Eyes are closed</string>
  <string name="identomat_face_hold">Hold still</string>
  <string name="identomat_no_face">Face is missing</string>
  <string name="identomat_face_covered">Face is covered</string>
  <string name="identomat_face_align">Frame your face</string>
  <string name="identomat_face_away_from_center">Center your Face</string>
  <string name="identomat_face_blurry">Face is blurry</string>
  <string name="identomat_face_far_away">Move closer</string>
  <string name="identomat_face_require_brighter">Low light</string>
  <string name="identomat_face_too_bright">Avoid direct light</string>
  <string name="identomat_face_too_close">Move away</string>
  <string name="identomat_smile_detected">Get neutral face</string>
  <string name="identomat_multiple_face">Keep only your face visible</string>
   
   
  //Camera permission
  <string name="identomat_camera_deny_title">Camera access denied</string>
  <string name="identomat_camera_deny_settings">Allow access</string>
  <string name="identomat_camera_deny_cancel">Cancel process</string>
   
   
  //Phone number collect&verify
  <string name="identomat_resend_code">Resend Code</string>
  <string name="identomat_get_code">Get Code</string>
  <string name="identomat_sms_title">Verify Phone Number</string>
  <string name="identomat_sms_subtitle">Enter your correct phone number\nto get verification code</string>
  <string name="identomat_resend_in">Resend code in </string>
  <string name="identomat_invalid_number">Please enter valid number</string>
  <string name="identomat_invalid_code">The code is not valid</string>
  <string name="identomat_sms_code_sent">Enter the 4-digit verification code sent to </string>
  <string name="identomat_enter_sms_code">Enter SMS code</string>
  <string name="identomat_phone_number_hint">Phone number</string>
  <string name="identomat_enter_phone_number">Enter phone number</string>
  <string name="identomat_enter_correct_number">Enter your correct phone number</string>
  <string name="identomat_confirm">Confirm</string>
  <string name="identomat_search">Search</string>
  <string name="identomat_verify_enter_code_hint">Enter code</string>
   
   
  // Email collect & verify
  <string name="identomat_enter_email_address">Enter email address</string>
  <string name="identomat_enter_correct_email">Enter your correct email address</string>
  <string name="identomat_enter_valid_email">Please enter valid email</string>
  <string name="identomat_email_hint">Email address</string>
  <string name="identomat_confirm">Confirm</string>
  <string name="identomat_email_check_title">Verify Email</string>
  <string name="identomat_email_check_subtitle">Enter your correct email address\nto get verification code</string>
  <string name="identomat_get_code">Get Code</string>
  <string name="identomat_resend_in">Resend code in </string>
  <string name="identomat_resend_code">Resend Code</string>
  <string name="identomat_verify_email_code_title">Enter code</string>
  <string name="identomat_verify_email_code_subtitle">Enter the 6-digit verification code sent to </string>
  <string name="identomat_verify_email_invalid_code">The code is not valid</string>
  <string name="identomat_verify_enter_code_hint">Enter code</string>
   
   
  //Page titles
  <string name="identomat_require_email_header"> </string>
  <string name="identomat_require_phone_number_header"> </string>
  <string name="identomat_require_phone_number_check_header"> </string>
  <string name="identomat_enter_sms_code_header"> </string>
  <string name="identomat_select_documents_header"> </string>
  <string name="identomat_capture_methods_header"> </string>
  <string name="identomat_upload_header"> </string>
  <string name="identomat_new_liveness_header"> </string>
  <string name="identomat_camera_access_header"> </string>
  <string name="identomat_select_country">Select country</string>
  <string name="identomat_retry_header"> </string>
   
   
  //Geolocation
  <string name="identomat_send_location_button">Send Location</string>
  <string name="identomat_geolocation_title">Allow location access</string>
  <string name="identomat_geolocation_subtitle">To continue the verification, we need access to your device\'s location.</string>
  <string name="identomat_geolocation_success">Your profile has been verified.</string>
   
  <string name="identomat_geolocation_deny_title">Location access denied</string>
  <string name="identomat_geolocation_deny_subtitle">We can't identify you without your location</string>
  <string name="identomat_geolocation_deny_instruction_1">You can recover location access through your device settings</string>
  <string name="identomat_geolocation_deny_instruction_2">Go to app settings and enable location access for this app</string>
  <string name="identomat_geolocation_enable_button">Enable in settings</string>
  <string name="identomat_geolocation_cancel_button">Cancel process</string>
   
   
  //Proof of Address
  <string name="identomat_bank_statement">Bank Statement</string>
  <string name="identomat_utility_bill">Utility bill</string>
  <string name="identomat_vehicle_registration_certificate">Vehicle registration certificate</string>
  <string name="identomat_yellow_slip">Yellow slip</string>
  <string name="identomat_drivers_license">Driver\'s license</string>
   
  <string name="identomat_upload_bank_statement">Upload Bank Statement</string>
  <string name="identomat_upload_utility_bill">Upload Utility bill</string>
  <string name="identomat_upload_vehicle_registration_certificate">Upload Vehicle registration certificate</string>
  <string name="identomat_upload_yellow_slip">Upload Yellow slip</string>
  <string name="identomat_upload_drivers_license">Upload Driver\'s license</string>
  <string name="identomat_upload_document_subtitle">Make sure that all the information on the photo is visible and easy to read</string>
   
  <string name="identomat_select_document_title">Select Document</string>
  <string name="identomat_proof_of_address_title">Proof of Address</string>
  <string name="identomat_proof_of_address_subtitle">Please upload a document that confirms your residential address.</string>
  <string name="identomat_uploaded">Uploaded</string>
  <string name="identomat_document_errors">Document Errors</string>
   
  <string name="identomat_expired_date_was_not_found">Expiry date was not found in the document</string>
  <string name="identomat_issued_date_was_not_found">Issue date was not found in the document</string>
  <string name="identomat_full_name_does_not_match">Full name does not match</string>
  <string name="identomat_full_name_was_not_found">Full name was not found in the document</string>
  <string name="identomat_issuing_authority_name_was_not_found">Issuing authority name was not found in the document</string>
  <string name="identomat_street_address_was_not_found">Street address was not found in the document</string>
  <string name="identomat_document_expired">Document is expired</string>
  <string name="identomat_address_not_valid">Address not valid</string>
  <string name="identomat_document_date_is_in_the_future">Document date is in the future</string>
  <string name="identomat_document_not_matched">Document not matched</string>
  <string name="identomat_oversized_file">Oversized File: Maximum file size is 5MB</string>
  <string name="identomat_unsupported_file_type">File Format Mismatch</string>
  <string name="identomat_too_many_pages">Too many Pages: Maximum pages is 20</string>
   
  <string name="identomat_continue">Continue</string>
  <string name="identomat_no_connection">No internet connection</string>
  
  
  <string name="identomat_nfc_next">Next</string>
  <string name="identomat_nfc_start_scanning">Start Scanning</string>
  <string name="identomat_nfc_check_id">Check for the NFC chip in your ID</string>
  <string name="identomat_nfc_check_passport">Check for the NFC chip in your Passport</string>
  <string name="identomat_nfc_subtitle_id">Make sure the ID card has appropriate symbols on it</string>
  <string name="identomat_nfc_subtitle_id_1">Flip the ID card and scan the back side</string>
  <string name="identomat_nfc_subtitle_passport">Make sure the passport has appropriate symbols on it</string>
  <string name="identomat_nfc_subtitle_passport_1">Open the passport to the photo page and scan it</string>
  <string name="identomat_nfc_scan_the_document">Scan the document</string>
  <string name="identomat_nfc_read_id_error_1">Remove your document and phone covers</string>
  <string name="identomat_nfc_read_id_error_2">Ensure that your document has NFC capability</string>
  <string name="identomat_nfc_read_id_error_3">Keep your document and phone still until the progress bar is filled</string>
  <string name="identomat_nfc_read_error_key_missmatch">Please scan the document again or choose another method</string>
  <string name="identomat_nfc_read_error_button_1">Retry reading</string>
  <string name="identomat_nfc_read_error_button_2">Try another method</string>
  <string name="identomat_nfc_read_id_title">Read the NFC chip on your ID</string>
  <string name="identomat_nfc_read_desc">Follow instructions below</string>
  <string name="identomat_nfc_read_warning">Do not separate the document and the phone during the reading process</string>
  <string name="identomat_nfc_read_warning_1">Keep your phone and document still</string>
  <string name="identomat_nfc_reading">Reading...</string>
  <string name="identomat_nfc_dialog_title">NFC not enabled</string>
  <string name="identomat_nfc_dialog_message">To enable it, please navigate to the NFC settings and toggle the switch to on.</string>
  <string name="identomat_nfc_dialog_settings">Settings</string>
  <string name="identomat_nfc_dialog_cancel">Cancel</string>
  
  <string name="identomat_nfc_scan_passport_title">Passport photo page</string>
  <string name="identomat_nfc_error_title">We couldn\'t read NFC on your document</string>
  <string name="identomat_nfc_ready_to_read">Ready to read</string>
  <string name="identomat_nfc_id_place_phone">Place your phone on your ID</string>
  <string name="identomat_nfc_passport_place_phone">Place your phone on your passport</string>
  <string name="identomat_nfc_read_passport_title">Read the NFC chip on your Passport</string>
  <string name="identomat_nfc_read_id_inst_1">Place your ID card at the back of your phone</string>
  <string name="identomat_nfc_read_passport_inst_1">Place your passport at the back of your phone</string>
  <string name="identomat_nfc_read_inst_2">Slowly slide your document up and down</string>
  <string name="identomat_nfc_read_inst_3">Once the reading starts, hold your document and phone still</string>
  <string name="identomat_nfc_button_start_reading">Start reading</string>
  <string name="identomat_nfc_scan">NFC Scan</string>
  
  <string name="identomat_nfc_header"> </string>
  <string name="identomat_nfc_reading_complete">Reading Complete</string>
  
  //Social Security Number verification
  <string name="identomat_ssn_consent_header">SSN verification</string>
  <string name="identomat_ssn_consent_title">Authorization for the Social Security Administration to disclose your social security number verification</string>
  <string name="identomat_ssn_consent_document">I authorize the Social Security Administration (SSA) to verify and disclose to the requesting party whether the name, Social Security Number (SSN), and date of birth I have submitted matches information in SSA records.</string>
  <string name="identomat_ssn_consent_agree">Agree</string>
  <string name="identomat_ssn_verification_header"> </string>
  <string name="identomat_ssn_title">Confirm your identity</string>
  <string name="identomat_ssn_subtitle">Enter your details exactly as they appear on your government-issued ID.</string>
  <string name="identomat_ssn_first_name_hint">First Name</string>
  <string name="identomat_ssn_last_name_hint">Last Name</string>
  <string name="identomat_ssn_dob_hint">Choose date</string>
  <string name="identomat_ssn_hint">000-00-0000</string>
  <string name="identomat_ssn_confirm_hint">000-00-0000</string>
  <string name="identomat_ssn_mismatch_error">The numbers you entered don\'t match. Please try again.</string>
  <string name="identomat_ssn_api_error">An error occurred. Please try again.</string>
  <string name="identomat_ssn_verify">Verify</string>
  <string name="identomat_ssn_consent_declined_title">Verification Declined</string>
  <string name="identomat_ssn_consent_declined_description">SSN consent was declined. This verification session has ended.</string>
  <string name="identomat_ssn_mismatch_title">Verification Failed</string>
  <string name="identomat_ssn_mismatch_description">Your information did not match SSA records. This session has ended.</string>
  <string name="identomat_ssn_deceased_title">Verification Failed</string>
  <string name="identomat_ssn_deceased_description">We Couldn\'t validate your SSN</string>

  <string name="identomat_ssn_confirm_identity_title">Confirm your identity</string>
  <string name="identomat_ssn_confirm_identity_subtitle">Enter your details exactly as they appear on your government-issued ID.</string>
  <string name="identomat_ssn_first_name_label">First name</string>
  <string name="identomat_ssn_middle_name_label">First name (optional)</string>
  <string name="identomat_ssn_middle_name_hint">Middle name</string>
  <string name="identomat_ssn_last_name_label">Last name</string>
  <string name="identomat_ssn_dob_label">Date of birth</string>
  <string name="identomat_ssn_choose_date">Choose date</string>
  <string name="identomat_ssn_section_title">Enter your Social Security Number</string>
  <string name="identomat_ssn_section_subtitle">Provide your 9-digit SSN for identity verification. Your number is used solely to confirm your identity and is not stored on our servers.</string>
  <string name="identomat_ssn_number_label">Social Security Number</string>
  <string name="identomat_ssn_confirm_number_label">Confirm Social Security Number</string>
  <string name="identomat_ssn_mismatch_detail_error">The numbers you entered don\'t match. Please try again.</string>
  <string name="identomat_ssn_encrypted_title">Your data is encrypted</string>
  <string name="identomat_ssn_encrypted_message">Your information is encrypted in transit using 256-bit SSL and sent directly to the SSA. We do not store your full SSN.</string>
  <string name="identomat_ssn_consent_disclosure_title">One-time disclosure consent</string>
  <string name="identomat_ssn_consent_disclosure_body">This consent is for a one-time disclosure and is valid for 90 days from the date of signature.</string>
  <string name="identomat_ssn_success_title">Verification successful</string>
  <string name="identomat_ssn_success_description">Your SSN has been validated</string>
  
</resources>
```

### 4. Встановлення користувацького логотипу

`setLogo(() -> View?)` Ця функція використовується для встановлення користувацького логотипу в бібліотеці. Ви можете передати власний користувацький view та відображати на ньому будь-що (анімації, зображення тощо). Цей логотип відображатиметься, коли бібліотека щось обробляє.

***


# Журнал змін Android SDK

Слідкуйте за змінами та оновленнями Identomat Android SDK.

{% hint style="info" %}
**Критичні зміни (Breaking changes) позначені жирним шрифтом.**
{% endhint %}

### Version 1.1.188

*Випущено 13 серп. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.187

*Випущено 17 лип. 2026*

* **Додано: Крок верифікації номера соціального страхування (SSN)**\
  Цей крок дозволяє користувачам безпечно подавати та перевіряти свій номер соціального страхування (SSN) як частину потоку верифікації особи, допомагаючи підтвердити їхню особу та відповідати вимогам відповідності.

### Version 1.1.186

*Випущено 03 лип. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.185

*Випущено 24 черв. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.184

*Випущено 11 черв. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.183

*Випущено 08 трав. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.182

*Випущено 01 трав. 2026*

* **Додано: Сторінку перевірки даних документа.**\
  Тепер користувачі можуть переглядати та редагувати витягнуті дані документа перед поданням. Деталі впровадження див. у нашому Посібнику для розробників.

### Version 1.1.181

*Випущено 16 квіт. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.180

*Випущено 15 квіт. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.179

*Випущено 25 берез. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.178

*Випущено 17 берез. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.177

*Випущено 11 берез. 2026*

* **Додано: Можливість включити крок верифікації Email.**

### Version 1.1.176

*Випущено 25 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.175

*Випущено 13 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.174

*Випущено 12 лют. 2026*

* **Додано:** Можливість перевизначати кольори конкретних елементів для розширеного налаштування UI:
  * `input_active_border_color` – Колір рамки полів вводу в активному стані.
  * `input_default_border_color` – Колір рамки полів вводу за замовчуванням.
  * `button_secondary_outline_color` – Колір контуру вторинних кнопок.
  * `button_secondary_text_color` – Колір тексту вторинних кнопок.

### Version 1.1.173

*Випущено 09 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.172

*Випущено 02 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.171

*Випущено 29 січ. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.170

*Випущено 28 січ. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.169

*Випущено 14 січ. 2026*

* **Додано**: **Підтримку зчитувача NFC**.

Щоб увімкнути NFC у кроці ID document, необхідно надати прапорець `allow_nfc_capture: true`.

### Version 1.1.168

*Випущено 12 січ. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.167

*Випущено 30 груд. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.166

*Випущено 22 груд. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.165

*Випущено 19 груд. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.164

*Випущено 15 груд. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.163

*Випущено 08 груд. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.162

*Випущено 27 лист. 2025*

* **Покращено**: Наявні перевірки безпеки тепер точніше виявляють зміни цілісності системи.

### Version 1.1.160

*Випущено 13 жовт. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.159

*Випущено 07 жовт. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.158

*Випущено 29 верес. 2025*

* **Додано: Можливість включити крок Proof of Address (POA).**

### Version 1.1.157

*Випущено 17 верес. 2025*

* **Додано: Можливість включити крок Geolocation.**

### Version 1.1.156

*Випущено 16 верес. 2025*

* **Додано**: Можливість налаштовувати іконки на сторінці інструкцій адаптивної перевірки живості.

### Version 1.1.155

*Випущено 09 верес. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.154

*Випущено 01 верес. 2025*

* **Додано**: Підтримку розміру сторінки 16 КБ, що призвело до різних покращень продуктивності.
* **Виправлено**: Проблему з перевіркою живості, спричинену налаштуваннями роздільної здатності камери.

### Version 1.1.153

*Випущено 22 серп. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.151

*Випущено 18 серп. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.150

*Випущено 05 серп. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.147

*Випущено 29 лип. 2025*

* **Виправлено:** Різні помилки, пов'язані з кроком опитувальника користувача.

### Version 1.1.146

*Випущено 23 лип. 2025*

* **Додано: Можливість включити крок опитувальника користувача.**

Деталі впровадження див. у нашому Посібнику для розробників.

### Version 1.1.145

*Випущено 11 лип. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.144

*Випущено 03 лип. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.143

*Випущено 02 лип. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.142

*Випущено 26 черв. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.139

*Випущено 04 черв. 2025*

* **Оновлено:** Безпеку, запобігаючи доступу з пристроїв зі зміненою цілісністю системи.

### Version 1.1.138

*Випущено 23 трав. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.
* **Оновлено:** Версію Kotlin до 2.1.21.

### Version 1.1.136

*Випущено 29 берез. 2025*

* **Додано**: Можливість знімати фото у форматі Full HD.
* **Змінено**: Параметри для шрифтів, розмірів шрифтів та кольорів.
  * **Встановлення шрифту**
    * `head1_font` змінено на `headline_font`
    * `head2_font` було <mark style="color:red;">видалено</mark>.
  * **Встановлення розміру шрифту**
    * `title_font_size` змінено на `title_medium_size`
    * `head1_font_size` змінено на `headline_medium_size`
    * `body_font_size` змінено на `body_medium_size`
    * `title_small_size` було <mark style="color:green;">додано</mark>.
    * `headline_small_size` було <mark style="color:green;">додано</mark>.
    * `body_small_size` було <mark style="color:green;">додано</mark>.
  * **Встановлення кольорів шрифту**
    * `text_color_header` змінено на `text_primary`
    * `text_color_title` було <mark style="color:red;">видалено</mark>.
    * `text_color` було <mark style="color:red;">видалено</mark>.
    * `text_secondary` було <mark style="color:green;">додано</mark>.
    * `text_placeholder` було <mark style="color:green;">додано</mark>.
    * `text_disabled` було <mark style="color:green;">додано</mark>.
    * `text_inverse` було <mark style="color:green;">додано</mark>.
    * `text_link` було <mark style="color:green;">додано</mark>.

### Version 1.1.134

*Випущено 26 берез. 2025*

* **Виправлено**: Іконка на сторінці повторної спроби не оновлювалася відповідно до основного кольору.

### Version 1.1.133

*Випущено 20 берез. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.132

*Випущено 18 берез. 2025*

* **Виправлено:** Поля верифікації номера телефону та email неправильно очищалися при натисканні кнопки «назад».

### Version 1.1.129

*Випущено 12 берез. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.127 (Beta-реліз)

*Випущено 04 берез. 2025*

* **Додано:** Автоматичне налаштування яскравості екрана мобільного пристрою під час виявлення живості для покращення користувацького досвіду.

### Version 1.1.126 (Beta-реліз)

*Випущено 25 лют. 2025*

* **Додано**: Нову функцію виявлення живості для розширеної верифікації особи.

### Version 1.1.125

*Випущено 17 лют. 2025*

* **Додано**: Нові змінні для налаштування UI:
  * `back_button_icon` – Змінює іконку кнопки «назад».
  * `primary_button_width` – Налаштовує ширину основної кнопки.
  * `primary_button_height` – Налаштовує висоту основної кнопки.
  * `liveness_smile_icon`– Змінює іконку посмішки перевірки живості. Приклад: *UIImage(named: "liveness\_smile\_icon")*

### Version 1.1.123

*Випущено 12 лют. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.123

*Випущено 7 лют. 2025*

* **Додано**: Вибір коду країни для кроків збору та верифікації номера телефону.
* **Додано**: Можливість налаштовувати іконку кнопки «назад».

### Version 1.1.122

* **Виправлено**: Проблеми з вирівнюванням полів та тексту на кроках збору номера телефону, верифікації номера телефону, збору email та верифікації email.

### Version 1.1.120

* **Додано**: **Нову функцію виявлення живості для розширеної верифікації особи.**

### Version 1.1.119

* **Виправлено**: Проблему зі збоєм на Android 7 під час процесу верифікації.

### Version 1.1.118

* Лише **внутрішні** зміни

### Version 1.1.117

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.116

* **Виправлено**: Помилка «Очі закриті» відображалася некоректно.

### Version 1.1.115

* **Змінено**: Назву прапорця для верифікації номера телефону.
  * `require_sms_verification` змінено на `require_phone_number_check`

### Version 1.1.114

* **Оновлено**: Версію бібліотеки Material оновлено.

### Version 1.1.113

* **Оновлено**: Версію бібліотеки Material оновлено.

### Version 1.1.112

* **Виправлено**: Скориговано вирівнювання тексту на сторінці повторної спроби, тепер центровано щодо емодзі.

### Version 1.1.111

* **Змінено**: UI сторінки повторної спроби перевірки живості оновлено для покращення користувацького досвіду.

### Version 1.1.110

* **Виправлено**: Різні помилки в функціональності захоплення документа.

### Version 1.1.109

* **Додано**: Зчитувач свідоцтва про реєстрацію транспортного засобу в кроці Proof of Address.

### Version 1.1.104

* **Покращено**: Скорочено час захоплення пасивної перевірки живості для швидшої верифікації.

### Version 1.1.103

* **Виправлено**: Проблему з тривалістю сесії в сесіях SDK, забезпечуючи правильне закінчення терміну дії сесії.

### Version 1.1.102

* **Виправлено**: Проблему розмиття на камерах Samsung Galaxy S24 та Samsung Galaxy S24 Ultra.

### Version 1.1.101

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.100

* **Додано**: Можливість змінювати код країни на кроках збору та верифікації номера телефону.

### Version 1.1.99

* **Змінено**: Іконку живості та колір тексту завантаження тепер можна налаштовувати окремо.

### Version 1.1.98

* **Додано**: Можливість перекладати тексти на кроках збору та верифікації номера телефону.

### Version 1.1.97

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.96

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.95

* **Виправлено**: Помилки, пов'язані з оновленням функції повторної спроби каскадного процесу.

### Version 1.1.94

* **Додано**: Опції налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.93

* **Додано**: Функцію повторної спроби до каскадного процесу.

### Version 1.1.92

* **Змінено:** Об'єднано пасивну перевірку живості та каскадну функціональність для покращення продуктивності.

### Version 1.1.91

* **Виправлено**: Проблему зі збоєм застосунку під час відеодзвінків.

### Version 1.1.90

* **Додано**: Можливість показувати чи приховувати кнопки камери та мікрофона для користувача.

### Version 1.1.89

* **Додано**: Журнали дозволів камери для кращого усунення несправностей та налагодження.
  * `camera-access-request`
  * `camera-access-acquire`
  * `camera-access-reject`


# iOS SDK

Ласкаво просимо до документації Identomat iOS SDK! Тут ви знайдете все необхідне для безшовної інтеграції наших рішень з верифікації особи та KYC/AML у ваш iOS-застосунок.

{% hint style="info" %}
Остання версія: **Version 1.1.171**
{% endhint %}

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>Детальний посібник дивіться в нашій документації на <strong>GitLab</strong>.</td><td></td><td></td><td><a href="https://gitlab.identomat.com/world/identomat-ios-framework-spm">https://gitlab.identomat.com/world/identomat-ios-framework-spm</a></td></tr></tbody></table>

## Документація з інтеграції

Бібліотека Identomat надає потік ідентифікації користувача, що складається з різних кроків, які поєднують тип документа та зображення/відео користувача для верифікації.

### Для початку сесії за допомогою API Identomat необхідні такі кроки

{% stepper %}
{% step %}
[Отримати токен сесії та налаштувати сесію](#id-1.-otrimati-token-sesiyi-ta-nalashtuvati-sesiyu)
{% endstep %}

{% step %}
[Отримати екземпляр Identomat SDK](#id-2.-otrimati-ekzemplyar-identomat-sdk-ta-peredati-dani)
{% endstep %}

{% step %}
[Передати токен сесії та обробити колбек](#id-4.-pass-session-token-and-handle-callback)
{% endstep %}

{% step %}
[Запустити Identomat SDK](#id-4.-zapustiti-identomat-sdk)
{% endstep %}

{% step %}
[Передати додаткові змінні](#id-5.-peredati-dodatkovi-zminni)
{% endstep %}
{% endstepper %}

## 1. Отримати токен сесії та налаштувати сесію

Щоб почати сесію, спочатку потрібно отримати `session_token`, викликавши ендпоінт `begin/` та налаштувавши ваш потік верифікації.

> ⚠️ **Примітка:** Цей процес ідентичний для веб- та SDK-інтеграцій.

Повні деталі щодо генерації токена сесії, налаштування кроків та прапорців, а також запуску сесії див. у **Посібнику з веб-інтеграції — ініціалізація сесії**.

Отримавши токен сесії, ви можете продовжити інтеграцію його у ваш потік SDK.

## 2. Отримати екземпляр Identomat SDK та передати дані

Основний клас Identomat SDK — це клас `IdentomatManager`.\
`IdentomatManager` — клас-синглтон в Identomat SDK.

Щоб отримати змінну SDK, ви можете використати такий код:

```swift
let indetomatSdk = IdentomatManager.getInstance();
```

Альтернативно, ви можете щоразу викликати `IdentomatManager.getInstance()`, і він поверне той самий екземпляр Identomat SDK.

## 3. Передати токен сесії та обробити колбек <a href="#id-4.-pass-session-token-and-handle-callback" id="id-4.-pass-session-token-and-handle-callback"></a>

* **sessionToken** – Відповідь від API: тип `String`.

Щоб передати токен сесії, ми використовуємо функцію `setUp`, яку можна викликати так:

```swift
IdentomatManager.getInstance().setUp(token: sessionToken)
```

Останній крок — передати функцію колбека, яка буде запущена після завершення взаємодії користувача з бібліотекою. Для цього використовуйте функцію `.callback`, яка приймає функцію як аргумент:

```swift
IdentomatManager.getInstance().callBack(callback: anyfunc)
//anyfunc is (()->Void)? type
//or
IdentomatManager.getInstance().callBack {
   print("finished")
}

IdentomatManager.getInstance().backButtonCallBack(callback: anyfunc)
/anyfunc is (()->Void)? type
//or
IdentomatManager.getInstance().backButtonCallBack {
   print("finished with back button")
}
```

## 4. Запустити Identomat SDK

Спочатку вам потрібно отримати стартовий view бібліотеки, а потім показати його користувачу.

{% code overflow="wrap" %}

```swift
let identomatView = IdentomatManager.getInstance().getIdentomatView()
identomatView.modalPresentationStyle = .fullScreen
self.present(identomatView, animated: true, completion: nil)  //self is UIViewController type class
```

{% endcode %}

## 5. Передати додаткові змінні

Для налаштування бібліотеки Identomat під застосунок у нас є декілька додаткових функцій:

1. `setColors(colors: [String : String])` - встановлює конкретні кольори 2.1 `setStringsTableName(tableNme : String)` - встановлює рядки за файлом мов 2.2 `setStrings(dict : [String : Any?])` - встановлює конкретні текстові рядки
2. `setVariables(variables : [String : Any?])` - встановлює багато настроюваних змінних
3. `setLogo(view: UIView)` - встановлює індикатор завантаження

Наступні функції у пункті 5 є ЗАСТАРІЛИМИ після версії 0.0.73

5.1 `setTitleFont(fontname: String, size : Int)` - встановлює шрифт заголовка в бібліотеці

5.2 `setHeadlineFont(fontname: String, size : Int)` - встановлює шрифт заголовка в бібліотеці

5.3 `setBodyFont(fontname: String, size : Int )` - встановлює шрифт основного тексту в бібліотеці

5.4 `skipLivenessInstructions()` - пропускає інструкції перевірки живості

5.5 `setLivenessIcons(neutralFace: UIImage?, smileFace: UIImage?)` - встановлює іконки перевірки живості

5.6 `setLivenessRetryIcon(retryIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перевірки живості, size встановлює розмір іконки

5.7 `setRetryIcon(retryIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перегляду сканування документа, size встановлює розмір іконки

5.8 `setCameraDenyIcon(cameraDenyIcon: Int?, size : Int)` - встановлює головну іконку панелі повторних спроб перегляду сканування документа

5.9 `hideStatusBar(_ bool : Bool), setStatusBarStyle(style : UIStatusBarStyle)` - налаштування статус-бару

***

### 1. Налаштування кольорів

Використовуйте функцію `setColors`, щоб налаштувати кольори в бібліотеці відповідно до теми застосунку. Передайте словник, що містить відповідні ключі кольорів та їхні відповідні шістнадцяткові значення:

```
"background",
"text_primary",
"text_secondary",
"text_placeholder",
"text_disabled",
"text_inverse",
"text_link",
"primary_color",
"neutral_color",
"danger_color",
"success_color",
"warning_color",
"black",
"white"
```

Спосіб передачі кольорів у бібліотеку:

```swift
IdentomatManager.getInstance().setColors(colors: colors)
```

### 2. Налаштування рядків <a href="#user-content-2" id="user-content-2"></a>

Щоб налаштувати рядки, які бібліотека відображає в конкретних місцях, ви можете використати дві функції:

1. `setStrings(dict: [String: Any?])`
2. `setStringsTableName(tableNme : String)`

Це два різні методи налаштування рядків.

Функція `setStrings` приймає словник із конкретними ключами для різних мов. Структура виглядає так:

```swift

static var strings : [String : Any?] = [
    "en" : [
        "identomat_agree" : "Yes I Agree",
    ],
    "ru" : [
        "identomat_agree": "Согласен",
    ],
    "es" : [
        "identomat_agree": "Acepto",
    ],
    "ka" : [
        "identomat_agree": "ვეთანხმები",
    ]
]
```

У другому підході ви використовуєте функцію `setStringsTableName(tableName: String)`, де створюєте файл `.strings` у вашому проєкті та локалізуєте його для різних мов, так само як ви робили б для свого застосунку.

Ось як використовувати цей метод:

1. Створіть файл `.strings`, наприклад, `languages.strings`.
2. Локалізуйте файл для різних мов, як зазвичай робите у вашому проєкті.
3. Передайте назву файлу `.strings` (без розширення) до бібліотеки, так:

```swift
setStringsTableName(tableNme : "languages")
```

### 3. Налаштування змінних <a href="#id-3.-customizing-variables" id="id-3.-customizing-variables"></a>

Для будь-якого іншого налаштування ми використовуємо функцію `setVariables(variables: Map<String, Any?>)`, куди ми передаємо мапу пар ключ-значення змінних.

Структура мапи виглядає так:

```swift
static var variables : [String : Any?] = [
    "back_button_icon": UIImage(named: "image_name"),                         -- sets back button icon. type -> UIImage
    "liveness_neutral_icon" : UIImage(named: "liveness_neutral_icon"),        -- sets liveness neutral face icon. type -> UIImage
    "liveness_smile_icon" : UIImage(named: "liveness_smile_icon"),            -- sets liveness smile face icon.       type -> UIImage
    "liveness_neutral_icon_record" : UIImage(named: "liveness_neutral_icon"), -- sets liveness neutral face icon while recording. type -> UIImage
    "liveness_smile_icon_record" : UIImage(named: "liveness_smile_icon"),     -- sets liveness smile face icon  while recording. type -> UIImage

    "liveness_retry_icon" : UIImage(named: "image_name"),           -- sets liveness retry page icon. type -> UIImage
    "liveness_retry_text_icon_1" : UIImage(named: "image_name"),    -- sets liveness retry first instruction icon.  type -> UIImage
    "liveness_retry_text_icon_2" : UIImage(named: "image_name"),    -- sets liveness retry second instruction icon. type -> UIImage
    "liveness_retry_text_icon_3" : UIImage(named: "image_name"),    -- sets liveness retry third instruction icon. type -> UIImage
    "liveness_retry_text_icon_4" : UIImage(named: "image_name"),    -- sets liveness retry fourth instruction icon. type -> UIImage
    "scan_retry_icon" : UIImage(named: "image_name"),               -- sets scan document retry page icon. type -> UIImage
    "camera_deny_icon" : UIImage(named: "image_name"),              -- sets camera deny page icon. type -> UIImage
    "upload_retry_icon" : UIImage(named: "image_name"),             -- sets upload retry page icon. type -> UIImage

    "liveness_retry_icon_size" : 200,     -- sets save icon sizes. type -> int
    "scan_retry_icon_size" : 200,
    "camera_deny_icon_size" : 200,
    "upload_retry_icon_size" : 200,
    "liveness_retry_text_icon_1_size": 24,
    "liveness_retry_text_icon_2_size": 24,
    "liveness_retry_text_icon_3_size": 24,
    "liveness_retry_text_icon_4_size": 24,
    
    "location_instruction_icon_1",
    "location_instruction_icon_2",
    
    "geolocation_icon",
    "geolocation_success_icon",
    "geolocation_deny_icon",

    "primary_button_width": nil,           -- sets primary button width, if nil its width is maximum
    "primary_button_height": 50,           -- sets primary button height,

    "skip_liveness_instructions" : false,  -- skips liveness instructions. type -> boolean
    "liveness_type" : 1,                   -- chooses liveness icons display type values 1 or 2.  type -> int
    "button_corner_radius" : nil,          -- sets button corner radious, if it's nil button will be round cornered
    "panel_elevation" : 1,                 -- sets panels elevation. type -> int

    "liveness_info_main_icon" or "liveness_info_main_anim",      -- instruction page  
    "liveness_frame_face_icon" or "liveness_frame_face_anim",    -- frame page
    "instruction_smile_icon" or "instruction_smile_anim"         -- Liveness processing page 
    
    Sets  font sizes
    "title_medium_size": 20,
    "title_small_size":
    "headline_medium_size": 20,
    "headline_small_size"
    "body_medium_size": 11
    "body_small_size"
 
    Sets font
    "title_font":"font-name",
    "body_font": "font-name",
    "headline_font":"font-name",

    "default_country_code": "GE"   -- sets default country for country code picker
]
```

### 4. Встановлення користувацького логотипу

`setLogo(view: UIView)` Ця функція використовується для встановлення користувацького логотипу в бібліотеці. Ви можете передати власний користувацький view та відображати на ньому будь-що (анімації, зображення тощо). Цей логотип відображатиметься, коли бібліотека щось обробляє.

***

### Ключі рядків та значення за замовчуванням <a href="#liveness-retry-string-keys" id="liveness-retry-string-keys"></a>

Ключі рядків та їхні значення за замовчуванням для англійської мови (залишено англійською, оскільки це значення за замовчуванням у файлі ресурсів коду):

```ini
 /* ID verification */
 "identomat_select_document" = "Select document";
  
 "identomat_card" = "ID card";
 "identomat_card_front_instructions" = "Scan FRONT SIDE of ID CARD";
 "identomat_card_front_upload" = "Upload FRONT SIDE of ID CARD";
 "identomat_card_rear_instructions" = "Scan BACK SIDE of ID CARD";
 "identomat_card_rear_upload" = "Upload BACK SIDE of ID CARD";
  
 "identomat_driver_license" = "Driver license";
 "identomat_driver_license_front_instructions" = "Scan FRONT SIDE of DRIVER LICENSE";
 "identomat_driver_license_front_upload" = "Upload FRONT SIDE of DRIVER LICENSE";
 "identomat_driver_license_rear_instructions" = "Scan BACK SIDE of DRIVER LICENSE";
 "identomat_driver_license_rear_upload" = "Upload BACK SIDE of DRIVER LICENSE";
  
 "identomat_passport" = "Passport";
 "identomat_passport_instructions" = "Passport photo page";
 "identomat_passport_upload" = "Upload passport photo page";
  
 "identomat_residence_permit" = "Residence permit";
 "identomat_residence_permit_front_instructions" = "Scan FRONT SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_front_upload" = "Upload FRONT SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_rear_instructions" = "Scan BACK SIDE of RESIDENCE PERMIT";
 "identomat_residence_permit_rear_upload" = "Upload BACK SIDE of RESIDENCE PERMIT";
  
 "identomat_capture_method_title" = "Choose a method";
 "identomat_take_photo" = "Take a photo";
 "identomat_upload_file" = "Upload a file";
 "identomat_upload_another_file" = "Upload another file";
  
 "identomat_upload_instructions_1" = "Upload a color image of the entire document";
 "identomat_upload_instructions_2" = "JPG or PNG format only";
 "identomat_upload_instructions_3" = "Screenshots are not allowed";
 "identomat_choose_file" = "Choose a file";
  
 "identomat_verifying" = "Verifying...";
 "identomat_uploading" = "Uploading...";
  
 "identomat_scan_retry_title" = "Capture failed";
 "identomat_scan_retry_instruction" = "Please try again in better lighting";
 "identomat_scan_retry_again" = "Try again";
 "identomat_upload_success" = "Successfully uploaded!";
  
 "identomat_no_document_in_image" = "Frame your document";
 "identomat_document_align" = "Frame your document";
 "identomat_document_blurry" = "Document is blurry";
 "identomat_document_face_blurry" = "Face on document is blurry";
 "identomat_document_face_require_brighter" = "Low light";
 "identomat_document_face_too_bright" = "Avoid direct light";
 "identomat_document_move_away" = "Please move document away";
 "identomat_document_move_closer" = "Please move document closer";
 "identomat_document_move_down" = "Please move document down";
 "identomat_document_move_left" = "Please move document to the left";
 "identomat_document_move_right" = "Please move document to the right";
 "identomat_document_move_up" = "Please move document up";
 "identomat_document_covered" = "Document is covered";
 "identomat_document_grayscale" = "Document is grayscale";
 "identomat_document_type_mismatch" = "Wrong document";
 "identomat_document_not_readable" = "Document not readable";
 "identomat_document_face_align" = "Document face align";
 "identomat_document_spoofing_detected2" = "Document spoofing detected";
 "identomat_document_page_mismatch" = "Wrong page";
 "identomat_document_nfc_chip_damaged" = "Document NFC chip damaged";
  
  
 /* Passive liveness */
 "identomat_face_instructions" = "Place your FACE within OVAL";
 "identomat_processing" = "Processing, please wait";
  
  
 /* Active liveness */
 "identomat_record_begin_section_1" = "Take a neutral expression";
 "identomat_record_begin_section_2" = "Smile on this sign";
 "identomat_record_begin_section_3" = "Take a neutral expression again";
 "identomat_record_begin_title" = "Get ready for your video selfie";
 "identomat_record_instructions" = "Place your FACE within OVAL and follow the on-screen instructions";
 "identomat_im_ready" = "I'm ready";
 "identomat_neutral_expression" = "Neutral face";
 "identomat_smile" = "Smile";
  
  
 /* Adaptive liveness */
"identomat_passive_record_begin_title" = "Get ready for your video selfie";
"identomat_passive_record_begin_subtitle" = "Follow the on-screen instructions when prompted.";
"identomat_passive_record_begin_subtitle_smile" = "When prompted, repeat the facial expression shown on the icons.";
"identomat_passive_record_begin_section_title" = "Tips";
"identomat_passive_record_begin_section_1" = "Frame your face";
"identomat_passive_record_begin_section_2" = "Hold still until success notify";
"identomat_smile" = "Smile""identomat_im_ready" = "I'm ready";
  
  
 /* Cascading liveness */
 "identomat_cascading_instructions" = "When prompted, repeat the facial expression shown on the icons: \n\n• Keep neutral face \n• Smile";
 "identomat_cascading_instructions_title" = "When prompted, repeat the facial expression shown on the icons:";
 "identomat_cascading_instructions_1" = "• Keep neutral face";
 "identomat_cascading_instructions_2" = "• Smile";
 "identomat_cascading_button" = "Start Liveness Check";
 "identomat_cascading_neutral_face" = "Keep neutral face";
 "identomat_cascading_start" = "Position your face!";
 "identomat_cascading_smile" = "Smile!";
 "identomat_cascading_fail" = "Liveness Failed";
 "identomat_cascading_success" = "That's it!";
  
 "identomat_liveness_retry_title" = "We can't detect your face";
 "identomat_liveness_retry_instruction" = "But first, please take a look at the instructions";
 "identomat_liveness_retry_again" = "Try again";
 "identomat_liveness_retry_instruction_1" = "Make sure to be in a place with good lighting";
 "identomat_liveness_retry_instruction_2" = "Make sure your eyes are clearly visible";
 "identomat_liveness_retry_instruction_3" = "Make sure to remove masks or other items that cover your face. Eyeglasses are okay";
 "identomat_liveness_retry_instruction_4" = "Make sure to only show your face, we don't need to see your ID";
  
 "identomat_lets_try" = "Let's try";
  
 "identomat_low_neutral_frequency" = "Untimely smile detected";
 "identomat_not_smile" = "Smile not detected";
 "identomat_eyes_closed" = "Eyes are closed";
 "identomat_face_hold" = "Hold still";
 "identomat_no_face" = "Face is missing";
 "identomat_face_covered" = "Face is covered";
 "identomat_face_align" = "Frame your face";
 "identomat_face_away_from_center" = "Center your Face";
 "identomat_face_blurry" = "Face is blurry";
 "identomat_face_far_away" = "Move closer";
 "identomat_face_require_brighter" = "Low light";
 "identomat_face_too_bright" = "Avoid direct light";
 "identomat_face_too_close" = "Move away";
 "identomat_smile_detected" = "Get neutral face";
 "identomat_multiple_face" = "Keep only your face visible";
  
 /* Camera permission */
 "identomat_camera_deny_title" = "Camera access denied";
 "identomat_camera_deny_settings" = "Allow access";
 "identomat_camera_deny_cancel" = "Cancel process";
  
  
 /* Phone number collection and verification */
 "identomat_resend_code" = "Resend Code";
 "identomat_get_code" = "Get Code";
 "identomat_sms_title" = "Verify Phone Number";
 "identomat_sms_subtitle" = "Enter your correct phone number\nto get verification code";
 "identomat_resend_in" = "Resend code in ";
 "identomat_invalid_number" = "Please enter valid number";
 "identomat_invalid_code" = "The code is not valid";
 "identomat_sms_code_sent" = "Enter the 4-digit verification code sent to ";
 "identomat_enter_sms_code" = "Enter SMS code";
 "identomat_phone_number_hint" = "Phone number";
 "identomat_enter_phone_number" = "Enter phone number";
 "identomat_enter_correct_number" = "Enter your correct phone number";
 "identomat_confirm" = "Confirm";
 "identomat_search" = "Search";
 "identomat_verify_enter_code_hint" = "Enter code";
  
  
 /* Email collection and verification*/
 "identomat_enter_email_address" = "Enter email address";
 "identomat_enter_correct_email" = "Enter your correct email address";
 "identomat_enter_valid_email" = "Please enter valid email";
 "identomat_email_hint" = "Email address";
 "identomat_confirm" = "Confirm";
 "identomat_email_check_title" = "Verify Email";
 "identomat_email_check_subtitle" = "Enter your correct email address\nto get verification code";
 "identomat_get_code" = "Get Code";
 "identomat_resend_in" = "Resend code in ";
 "identomat_resend_code" = "Resend Code";
 "identomat_verify_email_code_title" = "Enter code";
 "identomat_verify_email_code_subtitle" = "Enter the 6-digit verification code sent to ";
 "identomat_verify_email_invalid_code" = "The code is not valid";
 "identomat_verify_enter_code_hint" = "Enter code";
  
  
 /* Page titles */
 "identomat_require_email_header" = "";
 "identomat_require_phone_number_header" = "";
 "identomat_require_phone_number_check_header" = "";
 "identomat_enter_sms_code_header" = "";
 "identomat_select_documents_header" = "";
 "identomat_capture_methods_header" = "";
 "identomat_upload_header" = "";
 "identomat_new_liveness_header" = "";
 "identomat_camera_access_header" = "";
 "identomat_select_country" = "Select country";
 "identomat_retry_header" = "";
  
  
 /* Geolocation */
 "identomat_send_location_button" = "Send Location";
 "identomat_geolocation_title" = "Allow location access";
 "identomat_geolocation_subtitle" = "To continue the verification, we need access to your device's location.";
 "identomat_geolocation_success" = "Your profile has been verified.";
  
 "identomat_geolocation_deny_title" = "Location access denied";
 "identomat_geolocation_deny_subtitle" = "We can't identify you without your location";
 "identomat_geolocation_deny_instruction_1" = "You can recover location access through your device settings";
 "identomat_geolocation_deny_instruction_2" = "Go to app settings and enable location access for this app";
 "identomat_geolocation_enable_button" = "Enable in settings";
 "identomat_geolocation_cancel_button" = "Cancel process";
  
  
 /* Proof of address */
 "identomat_bank_statement" = "Bank Statement";
 "identomat_utility_bill" = "Utility bill";
 "identomat_vehicle_registration_certificate" = "Vehicle registration certificate";
 "identomat_yellow_slip" = "Yellow slip";
 "identomat_drivers_license" = "Driver's license";
  
 "identomat_upload_bank_statement" = "Upload Bank Statement";
 "identomat_upload_utility_bill" = "Upload Utility bill";
 "identomat_upload_vehicle_registration_certificate" = "Upload Vehicle registration certificate";
 "identomat_upload_yellow_slip" = "Upload Yellow slip";
 "identomat_upload_drivers_license" = "Upload Driver's license";
 "identomat_upload_document_subtitle" = "Make sure that all the information on the photo is visible and easy to read";
  
 "identomat_select_document_title" = "Select Document";
 "identomat_proof_of_address_title" = "Proof of Address";
 "identomat_proof_of_address_subtitle" = "Please upload a document that confirms your residential address.";
 "identomat_uploaded" = "Uploaded";
 "identomat_document_errors" = "Document Errors";
  
 "identomat_expired_date_was_not_found" = "Expiry date was not found in the document";
 "identomat_issued_date_was_not_found" = "Issue date was not found in the document";
 "identomat_full_name_does_not_match" = "Full name does not match";
 "identomat_full_name_was_not_found" = "Full name was not found in the document";
 "identomat_issuing_authority_name_was_not_found" = "Issuing authority name was not found in the document";
 "identomat_street_address_was_not_found" = "Street address was not found in the document";
 "identomat_document_expired" = "Document is expired";
 "identomat_address_not_valid" = "Address not valid";
 "identomat_document_date_is_in_the_future" = "Document date is in the future";
 "identomat_document_not_matched" = "Document not matched";
 "identomat_oversized_file" = "Oversized File: Maximum file size is 5MB";
 "identomat_unsupported_file_type" = "File Format Mismatch";
 "identomat_too_many_pages" = "Too many Pages: Maximum pages is 20";
  
 "identomat_continue" = "Continue";
 "identomat_no_connection" = "No internet connection";

```


# iOS SDK changelog

Слідкуйте за змінами та оновленнями Identomat iOS SDK.

{% hint style="info" %}
**Критичні зміни (Breaking changes) позначені жирним шрифтом.**
{% endhint %}

### Version 1.1.171

*Випущено 06 лип. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.165

*Випущено 25 черв. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.164

*Випущено 24 черв. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.163

*Випущено 16 черв. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.162

*Випущено 27 трав. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.161

*Випущено 15 трав. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.160

*Випущено 01 трав. 2026*

* **Додано: Сторінку перевірки даних документа.**\
  Тепер користувачі можуть переглядати та редагувати витягнуті дані документа перед поданням. Деталі впровадження див. у нашому Посібнику для розробників.

### Version 1.1.158

*Випущено 25 берез. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.157

*Випущено 11 берез. 2026*

* **Додано: Можливість включити крок верифікації Email.**

### Version 1.1.156

*Випущено 18 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.155

*Випущено 17 лют. 2026*

* **Додано:** Можливість перевизначати кольори конкретних елементів для розширеного налаштування UI:
  * `input_active_border_color` – Колір рамки полів вводу в активному стані.
  * `input_default_border_color` – Колір рамки полів вводу за замовчуванням.
  * `button_secondary_outline_color` – Колір контуру вторинних кнопок.
  * `button_secondary_text_color` – Колір тексту вторинних кнопок.

### Version 1.1.154

*Випущено 10 лют. 2026*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.153

*Випущено 02 лют. 2026*

* **Додано**: **Підтримку зчитувача NFC**.

Щоб увімкнути NFC у кроці ID document, необхідно надати прапорець `allow_nfc_capture: true`.

### Version 1.1.152

*Випущено 05 груд. 2025*

* **Виправлено**: Помилку перевірки живості, що впливала на iOS 15.

### Version 1.1.151

*Випущено 25 лист. 2025*

* **Додано**: [Нові змінні кольору](https://docs.identomat.com/sdks/ios-sdk/pages/sMnYHKpPfQuXczMlnIHB#id-1.-customizing-colors) в налаштуванні дизайну.
* **Виправлено**: Помилку інтерфейсу користувача в адаптивній перевірці живості.

### Version 1.1.149

*Випущено 20 жовт. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.148

*Випущено 13 жовт. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.147

*Випущено 07 жовт. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.145

*Випущено 30 верес. 2025*

* **Додано: Можливість включити крок Proof of Address (POA).**

### Version 1.1.142

*Випущено 23 верес. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.141

*Випущено 19 верес. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.140

*Випущено 12 верес. 2025*

* **Додано: Можливість включити крок Geolocation.**

### Version 1.1.139

*Випущено 09 верес. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.138

*Випущено 26 серп. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.135

*Випущено 07 серп. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.133

*Випущено 30 лип. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.131

*Випущено 24 лип. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.130

*Випущено 25 черв. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.129

*Випущено 21 трав. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.
* **Виправлено:** Проблему з відображенням мови — були видимі лише ключі замість фактичних заголовків.
* **Змінено**: Налаштування кольору гіперпосилань — раніше було прив'язано до основного кольору; тепер контролюється окремим параметром `text_link`.

### Version 1.1.127

*Випущено 29 берез. 2025*

* **Додано**: Можливість знімати фото у форматі Full HD.
* **Змінено**: Параметри для шрифтів, розмірів шрифтів та кольорів.
  * **Встановлення шрифту**
    * `head1_font` змінено на `headline_font`
    * `head2_font` було <mark style="color:red;">видалено</mark>.
  * **Встановлення розміру шрифту**
    * `title_font_size` змінено на `title_medium_size`
    * `head1_font_size` змінено на `headline_medium_size`
    * `body_font_size` змінено на `body_medium_size`
    * `title_small_size` було <mark style="color:green;">додано</mark>.
    * `headline_small_size` було <mark style="color:green;">додано</mark>.
    * `body_small_size` було <mark style="color:green;">додано</mark>.
  * **Встановлення кольорів шрифту**
    * `text_color_header` змінено на `text_primary`
    * `text_color_title` було <mark style="color:red;">видалено</mark>.
    * `text_color` було <mark style="color:red;">видалено</mark>.
    * `text_secondary` було <mark style="color:green;">додано</mark>.
    * `text_placeholder` було <mark style="color:green;">додано</mark>.
    * `text_disabled` було <mark style="color:green;">додано</mark>.
    * `text_inverse` було <mark style="color:green;">додано</mark>.
    * `text_link` було <mark style="color:green;">додано</mark>.

### Version 1.1.126

*Випущено 27 берез. 2025*

* **Виправлено**: Іконка на сторінці повторної спроби не оновлювалася відповідно до основного кольору.

### Version 1.1.124

*Випущено 17 берез. 2025*

* **Виправлено**: Проблему зі збоєм на сторінці повторної спроби під час встановлення іконки.

### Version 1.1.121

*Випущено 12 берез. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.121

*Випущено 17 лют. 2025*

* **Додано**: Нові змінні для налаштування UI:
  * `back_button_icon` – Змінює іконку кнопки «назад».
  * `primary_button_width` – Налаштовує ширину основної кнопки.
  * `primary_button_height` – Налаштовує висоту основної кнопки.
  * `liveness_smile_icon`– Змінює іконку посмішки перевірки живості. Приклад: *UIImage(named: "liveness\_smile\_icon")*

### Version 1.1.120

*Випущено 12 лют. 2025*

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.119

*Випущено 7 лют. 2025*

* **Додано**: Вибір коду країни для кроків збору та верифікації номера телефону.
* **Додано**: Можливість налаштовувати іконку кнопки «назад».

### Version 1.1.118

* **Виправлено**: Проблеми з вирівнюванням тексту на сторінках збору номера телефону та верифікації номера телефону.

### Version 1.1.116

* **Виправлено**: Проблеми з вирівнюванням тексту на сторінках збору номера телефону та верифікації номера телефону.

### Version 1.1.115

* Лише **внутрішні** зміни

### Version 1.1.114

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.113

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.112

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.111

* **Виправлено:** Різні помилки та покращення продуктивності.

### Version 1.1.110

* **Виправлено**: Різні помилки на сторінці повторної спроби.

### Version 1.1.109

* **Змінено**: UI сторінки повторної спроби перевірки живості оновлено для покращення користувацького досвіду.

### Version 1.1.108

* **Додано**: Зчитувач свідоцтва про реєстрацію транспортного засобу в кроці Proof of Address.

### Version 1.1.96

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.94

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.93

* **Виправлено**: Проблеми, пов'язані з оновленнями налаштування дизайну для кроків збору та верифікації номера телефону.

### Version

* **Змінено**: Іконку живості та колір тексту завантаження тепер можна налаштовувати окремо.
* **Виправлено**: Проблему з індикатором завантаження в кінці верифікації номера телефону.
* **Виправлено**: Проблему з перекладом угоди при зміні мов.
* **Виправлено**: Проблеми темного та світлого режимів — деякі кольори змінювалися некоректно.

### Version 1.1.91

* **Додано**: Можливість налаштовувати кольори посилань в угодах.

### Version 1.1.90

* **Додано**: Можливість перекладати тексти на кроках збору та верифікації номера телефону.

### Version 1.1.89

* **Додано**: Опції налаштування дизайну для кроків збору та верифікації номера телефону.

### Version 1.1.88

* **Змінено:** Об'єднано пасивну перевірку живості та каскадну функціональність для покращення продуктивності.

### Version 1.1.87

* **Змінено**: Назву прапорця для верифікації номера телефону.
  * `verify_phone_number changed` на `require_phone _number_check`

### Version 1.1.86

* **Виправлено**: Проблему з вибором правильної камери на iPhone 14 та новіших моделях.

### Version 1.1.85

* **Виправлено**: Помилки, пов'язані з додаванням посилань в угоди.

### Version 1.1.84

* **Додано**: Можливість включати посилання в угоди.
* **Виправлено**: Помилки, пов'язані з функціональністю верифікації номера телефону.

### Version 1.1.83

* **Додано**: Функціональність верифікації номера телефону.


# React Native SDK

Ласкаво просимо до документації Identomat React Native SDK! Тут ви знайдете все необхідне для безшовної інтеграції наших рішень з верифікації особи та KYC/AML у ваш React Native-застосунок.

{% hint style="info" %}
Остання версія: **Version 1.1.47**
{% endhint %}

## Початок роботи

```
$ npm install '@identomat-inc/react-native-identomat'
```

### Для iOS:

Запустіть `pod-install` у вашій директорії iOS.

### Для Android:

Вставте наступні рядки всередині блоку dependencies у `android/build.gradle`:

```
allprojects {
    repositories {
        google ()
        jcenter ()
        maven {
            url = uri("https://gitlab.identomat.com/api/v4/projects/674/packages/maven/")
        }
    }
}
```

## Використання

```
     import identomat from '@identomat-inc/react-native-identomat';
// Callback for when the process finishes
    class Callback {
        callback() {
        console.log('finished')
        }
    }

// Callback for back button
class Back {
    callback() {
      console.log('back')
    
    }
  }
    identomat.setCallback(new Callback());
    identomat.setBackButtonCallback(new Back());
    identomat.setBaseUrl(config.baseUrl);
    identomat.setColors(config.colors);
    identomat.setStrings(config.strings);
    identomat.start(config.sessionKey);
```

## Конфігурація

```
module.exports = {
  sessionKey : '',
  baseUrl : 'https://widget.identomat.com/api/',
  colors: {
    "background",
    "text_primary",
    "text_secondary",
    "text_placeholder",
    "text_disabled",
    "text_inverse",
    "text_link",
    "primary_color",
    "neutral_color",
    "danger_color",
    "success_color",
    "warning_color",
    "black",
    "white"
  },
  variables:{
    "liveness_retry_icon_size": 200,                  
    "scan_retry_icon_size": 200,
    "camera_deny_icon_size": 200,
    "upload_retry_icon_size": 200,
    "liveness_retry_text_icon_1_size": 24,
    "liveness_retry_text_icon_2_size": 24,
    "liveness_retry_text_icon_3_size": 24,
    "liveness_retry_text_icon_4_size": 24

    "title_medium_size": 16,
    "title_small_size": 14,
    "headline_medium_size": 28,
    "headline_small_size": 24, 
    "body_medium_size": 16,
    "body_small_size": 14

    "title_font":"font-name",
    "headline_font":"font-name",
    "body_font":"font-name",
},
  strings:{
    "en":{
      //ID verification
         
      "identomat_select_document": "Select document",
         
      "identomat_card": "ID card",
      "identomat_card_front_instructions": "Scan FRONT SIDE of ID CARD",
      "identomat_card_front_upload": "Upload FRONT SIDE of ID CARD",
      "identomat_card_rear_instructions": "Scan BACK SIDE of ID CARD",
      "identomat_card_rear_upload": "Upload BACK SIDE of ID CARD",
       
      "identomat_driver_license": "Driver license",
      "identomat_driver_license_front_instructions": "Scan FRONT SIDE of DRIVER LICENSE",
      "identomat_driver_license_front_upload": "Upload FRONT SIDE of DRIVER LICENSE",
      "identomat_driver_license_rear_instructions": "Scan BACK SIDE of DRIVER LICENSE",
      "identomat_driver_license_rear_upload": "Upload BACK SIDE of DRIVER LICENSE",
       
      "identomat_passport": "Passport",
      "identomat_passport_instructions": "Passport photo page",
      "identomat_passport_upload": "Upload passport photo page",
       
      "identomat_residence_permit": "Residence permit",
      "identomat_residence_permit_front_instructions": "Scan FRONT SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_front_upload": "Upload FRONT SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_rear_instructions": "Scan BACK SIDE of RESIDENCE PERMIT",
      "identomat_residence_permit_rear_upload": "Upload BACK SIDE of RESIDENCE PERMIT",
       
      "identomat_capture_method_title": "Choose a method",
      "identomat_take_photo": "Take a photo",
      "identomat_upload_file": "Upload a file",
      "identomat_upload_another_file": "Upload another file",
       
      "identomat_upload_instructions_1": "Upload a color image of the entire document",
      "identomat_upload_instructions_2": "JPG or PNG format only",
      "identomat_upload_instructions_3": "Screenshots are not allowed",
      "identomat_choose_file": "Choose a file",
       
      "identomat_verifying": "Verifying...",
      "identomat_uploading": "Uploading...",
       
      "identomat_scan_retry_title": "Capture failed",
      "identomat_scan_retry_instruction": "Please try again in better lighting",
      "identomat_scan_retry_again": "Try again",
      "identomat_upload_success": "Successfully uploaded!",
       
      "identomat_no_document_in_image": "Frame your document",
      "identomat_document_align": "Frame your document",
      "identomat_document_blurry": "Document is blurry",
      "identomat_document_face_blurry": "Face on document is blurry",
      "identomat_document_face_require_brighter": "Low light",
      "identomat_document_face_too_bright": "Avoid direct light",
      "identomat_document_move_away": "Please move document away",
      "identomat_document_move_closer": "Please move document closer",
      "identomat_document_move_down": "Please move document down",
      "identomat_document_move_left": "Please move document to the left",
      "identomat_document_move_right": "Please move document to the right",
      "identomat_document_move_up": "Please move document up",
      "identomat_document_covered": "Document is covered",
      "identomat_document_grayscale": "Document is grayscale",
      "identomat_document_type_mismatch": "Wrong document",
      "identomat_document_not_readable": "Document not readable",
      "identomat_document_face_align": "Document face align",
      "identomat_document_spoofing_detected2": "Document spoofing detected",
      "identomat_document_page_mismatch": "Wrong page",
      "identomat_document_nfc_chip_damaged": "Document NFC chip damaged";
       
       
      //Passive liveness
      "identomat_face_instructions": "Place your FACE within OVAL",
      "identomat_processing": "Processing, please wait";
       
       
      // Active liveness
      "identomat_record_begin_section_1": "Take a neutral expression",
      "identomat_record_begin_section_2": "Smile on this sign",
      "identomat_record_begin_section_3": "Take a neutral expression again",
      "identomat_record_begin_title": "Get ready for your video selfie",
      "identomat_record_instructions": "Place your FACE within OVAL and follow the on-screen instructions",
      "identomat_im_ready": "I'm ready",
      "identomat_neutral_expression": "Neutral face",
      "identomat_smile": "Smile",
       
       
      // Adaptive liveness
      "identomat_passive_record_begin_title": "Get ready for your video selfie",
      "identomat_passive_record_begin_subtitle": "Follow the on-screen instructions when prompted.",
      "identomat_passive_record_begin_subtitle_smile": "When prompted, repeat the facial expression shown on the icons."
      "identomat_passive_record_begin_section_title": "Tips",
      "identomat_passive_record_begin_section_1": "Frame your face",
      "identomat_passive_record_begin_section_2": "Hold still until you see a success notification.",
      "identomat_smile": "Smile",
      "identomat_im_ready": "I'm ready";
       
       
      // Cascading liveness
      "identomat_cascading_instructions": "When prompted, repeat the facial expression shown on the icons:\n\n• Keep neutral face\n• Smile",
      "identomat_cascading_instructions_title": "When prompted, repeat the facial expression shown on the icons:",
      "identomat_cascading_instructions_1": "• Keep neutral face",
      "identomat_cascading_instructions_2": "• Smile",
      "identomat_cascading_button": "Start Liveness Check",
      "identomat_cascading_neutral_face": "Keep neutral face",
      "identomat_cascading_start": "Position your face!",
      "identomat_cascading_smile": "Smile!",
      "identomat_cascading_fail": "Liveness Failed",
      "identomat_cascading_success": "That's it!",
       
      "identomat_liveness_retry_title": "We can't detect your face",
      "identomat_liveness_retry_instruction": "But first, please take a look at the instructions",
      "identomat_liveness_retry_again": "Try again",
      "identomat_liveness_retry_instruction_1": "Make sure to be in a place with good lighting",
      "identomat_liveness_retry_instruction_2": "Make sure your eyes are clearly visible",
      "identomat_liveness_retry_instruction_3": "Remove masks or items covering your face. Eyeglasses are okay",
      "identomat_liveness_retry_instruction_4": "Show only your face, we don’t need to see your ID",
       
      "identomat_lets_try": "Let's try",
       
      "identomat_low_neutral_frequency": "Untimely smile detected",
      "identomat_not_smile": "Smile not detected",
      "identomat_eyes_closed": "Eyes are closed",
      "identomat_face_hold": "Hold still",
      "identomat_no_face": "Face is missing",
      "identomat_face_covered": "Face is covered",
      "identomat_face_align": "Frame your face",
      "identomat_face_away_from_center": "Center your Face",
      "identomat_face_blurry": "Face is blurry",
      "identomat_face_far_away": "Move closer",
      "identomat_face_require_brighter": "Low light",
      "identomat_face_too_bright": "Avoid direct light",
      "identomat_face_too_close": "Move away",
      "identomat_smile_detected": "Get neutral face",
      "identomat_multiple_face": "Keep only your face visible",
       
       
      //Camera permission
      "identomat_camera_deny_title": "Camera access denied",
      "identomat_camera_deny_settings": "Allow access",
      "identomat_camera_deny_cancel": "Cancel process",
       
       
      //Phone number collection & verification
      "identomat_resend_code": "Resend Code",
      "identomat_get_code": "Get Code",
      "identomat_sms_title": "Verify Phone Number",
      "identomat_sms_subtitle": "Enter your correct phone number\nto get verification code",
      "identomat_resend_in": "Resend code in ",
      "identomat_invalid_number": "Please enter valid number",
      "identomat_invalid_code": "The code is not valid",
      "identomat_sms_code_sent": "Enter the 4-digit verification code sent to ",
      "identomat_enter_sms_code": "Enter SMS code",
      "identomat_phone_number_hint": "Phone number",
      "identomat_enter_phone_number": "Enter phone number",
      "identomat_enter_correct_number": "Enter your correct phone number",
      "identomat_confirm": "Confirm",
      "identomat_search": "Search",
      "identomat_verify_enter_code_hint": "Enter code",
       
       
      // Email collection & verification
      "identomat_enter_email_address": "Enter email address",
      "identomat_enter_correct_email": "Enter your correct email address",
      "identomat_enter_valid_email": "Please enter valid email",
      "identomat_email_hint": "Email address",
      "identomat_confirm": "Confirm",
      "identomat_email_check_title": "Verify Email",
      "identomat_email_check_subtitle": "Enter your correct email address\nto get verification code",
      "identomat_get_code": "Get Code",
      "identomat_resend_in": "Resend code in ",
      "identomat_resend_code": "Resend Code",
      "identomat_verify_email_code_title": "Enter code",
      "identomat_verify_email_code_subtitle": "Enter the 6-digit verification code sent to ",
      "identomat_verify_email_invalid_code": "The code is not valid",
      "identomat_verify_enter_code_hint": "Enter code",
       
       
      // Page titles
      "identomat_require_email_header": "",
      "identomat_require_phone_number_header": "",
      "identomat_require_phone_number_check_header": "",
      "identomat_enter_sms_code_header": "",
      "identomat_select_documents_header": "",
      "identomat_capture_methods_header": "",
      "identomat_upload_header": "",
      "identomat_new_liveness_header": "",
      "identomat_camera_access_header": "",
      "identomat_select_country": "Select country",
      "identomat_retry_header": "",
       
       
      //Geolocation
      "identomat_send_location_button": "Send Location",
      "identomat_geolocation_title": "Allow location access",
      "identomat_geolocation_subtitle": "To continue the verification, we need access to your device's location.",
      "identomat_geolocation_success": "Your profile has been verified.",
       
      "identomat_geolocation_deny_title": "Location access denied",
      "identomat_geolocation_deny_subtitle": "We can’t identify you without your location",
      "identomat_geolocation_deny_instruction_1": "You can recover location access through your device settings",
      "identomat_geolocation_deny_instruction_2": "Go to app settings and enable location access for this app",
      "identomat_geolocation_enable_button": "Enable in settings",
      "identomat_geolocation_cancel_button": "Cancel process",
       
       
      //Proof of address
      "identomat_bank_statement": "Bank Statement",
      "identomat_utility_bill": "Utility bill",
      "identomat_vehicle_registration_certificate": "Vehicle registration certificate",
      "identomat_yellow_slip": "Yellow slip",
      "identomat_drivers_license": "Driver's license",
       
      "identomat_upload_bank_statement": "Upload Bank Statement",
      "identomat_upload_utility_bill": "Upload Utility bill",
      "identomat_upload_vehicle_registration_certificate": "Upload Vehicle registration certificate",
      "identomat_upload_yellow_slip": "Upload Yellow slip",
      "identomat_upload_drivers_license": "Upload Driver's license",
      "identomat_upload_document_subtitle": "Make sure that all the information on the photo is visible and easy to read",
       
      "identomat_select_document_title": "Select Document",
      "identomat_proof_of_address_title": "Proof of Address",
      "identomat_proof_of_address_subtitle": "Please upload a document that confirms your residential address.",
      "identomat_uploaded": "Uploaded",
      "identomat_document_errors": "Document Errors",
       
      "identomat_expired_date_was_not_found": "Expiry date was not found in the document",
      "identomat_issued_date_was_not_found": "Issue date was not found in the document",
      "identomat_full_name_does_not_match": "Full name does not match",
      "identomat_full_name_was_not_found": "Full name was not found in the document",
      "identomat_issuing_authority_name_was_not_found": "Issuing authority name was not found in the document",
      "identomat_street_address_was_not_found": "Street address was not found in the document",
      "identomat_document_expired": "Document is expired",
      "identomat_address_not_valid": "Address not valid",
      "identomat_document_date_is_in_the_future": "Document date is in the future",
      "identomat_document_not_matched": "Document not matched",
      "identomat_oversized_file": "Oversized File: Maximum file size is 5MB",
      "identomat_unsupported_file_type": "File Format Mismatch",
      "identomat_too_many_pages": "Too many pages: The maximum is 20",
       
      "identomat_continue": "Continue",
      "identomat_no_connection": "No internet connection"
    }
  }
}
```


# React Native SDK changelog

Слідкуйте за змінами та оновленнями React Native SDK.

{% hint style="info" %}
**Критичні зміни (Breaking changes) позначені жирним шрифтом.**
{% endhint %}

### Version 1.1.47

*Випущено 06 лип. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.171.

### Version 1.1.45

*Випущено 24 черв. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.165.

### Version 1.1.44

*Випущено 24 черв. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.164, а версію Android — до 1.1.185.

### Version 1.1.43

*Випущено 13 трав. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.161, а версію Android — до 1.1.183.

### Version 1.1.42

*Випущено 22 квіт. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.159, а версію Android — до 1.1.181.

### Version 1.1.41

*Випущено 25 берез. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.158, а версію Android — до 1.1.179.

### Version 1.1.40

*Випущено 11 берез. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.157, а версію Android — до 1.1.177.
* **Додано: Можливість включити крок верифікації Email.**

### Version 1.1.38

*Випущено 18 лют. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.156.

### Version 1.1.37

*Випущено 17 лют. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.155, **додано** можливість перевизначати кольори конкретних елементів для розширеного налаштування UI:
  * `input_active_border_color` – Колір рамки полів вводу в активному стані.
  * `input_default_border_color` – Колір рамки полів вводу за замовчуванням.
  * `button_secondary_outline_color` – Колір контуру вторинних кнопок.
  * `button_secondary_text_color` – Колір тексту вторинних кнопок.

### Version 1.1.36

*Випущено 13 лют. 2026*

* **Оновлено**: Версію Android збільшено до 1.1.175, **додано** можливість перевизначати кольори конкретних елементів для розширеного налаштування UI:
  * `input_active_border_color` – Колір рамки полів вводу в активному стані.
  * `input_default_border_color` – Колір рамки полів вводу за замовчуванням.
  * `button_secondary_outline_color` – Колір контуру вторинних кнопок.
  * `button_secondary_text_color` – Колір тексту вторинних кнопок.

### Version 1.1.34

*Випущено 02 лют. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.153, **додано підтримку зчитувача NFC.** Версію Android збільшено до 1.1.172.

### Version 1.1.33

*Випущено 29 січ. 2026*

* **Оновлено**: Версію Android збільшено до 1.1.171.

### Version 1.1.32

*Випущено 21 січ. 2026*

* **Оновлено**: Версію Android збільшено до 1.1.166, **додано підтримку зчитувача NFC.**

### Version 1.1.30

*Випущено 08 груд. 2025*

* **Додано**: [Нові змінні кольору](https://docs.identomat.com/sdks/react-native-sdk/pages/sMnYHKpPfQuXczMlnIHB#id-1.-customizing-colors) в налаштуванні дизайну.
* **Оновлено**: Версію iOS збільшено до 1.1.152, а версію Android — до 1.1.163.

### Version 1.1.28

*Випущено 19 верес. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.141.

### Version 1.1.26

*Випущено 10 верес. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.139, а версію Android — до 1.1.155.

### Version 1.1.25

*Випущено 29 лип. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.132, а версію Android — до 1.1.147.
* **Додано: Можливість включити крок опитувальника користувача.**
* **Додано: Можливість запускати сесії за допомогою попередньо визначеної конфігурації.**

### Version 1.1.24

*Випущено 24 лип. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.131, а версію Android — до 1.1.146.

### Version 1.1.23

*Випущено 26 черв. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.130, а версію Android — до 1.1.142.

### Version 1.1.21

*Випущено 23 трав. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.129, а версію Android — до 1.1.138 через оновлення версії Kotlin (2.1.21).

### Version 1.1.19

*Випущено 27 берез. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.126, а версію Android — до 1.1.134.

### Version 1.1.18

*Випущено 17 берез. 2025*

* **Оновлено**: Версію Android збільшено до 1.1.133.

### Version 1.1.17

*Випущено 17 берез. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.124, а версію Android — до 1.1.132.

### Version 1.1.13

*Випущено 12 берез. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.122, а версію Android — до 1.1.129.

### Version 1.1.13

* **Виправлено**: Різні помилки та покращення продуктивності.

### Version 1.1.13

* **Додано**: Колбек для незавершених сесій.
* **Оновлено**: Версію iOS збільшено до 1.1.120, а версію Android — до 1.1.124.

### Version 1.1.12

* **Оновлено**: Версію iOS збільшено до 1.1.119, а версію Android — до 1.1.123.

### Version 1.1.11

* **Оновлено**: Версію Android збільшено до 1.1.122.

### Version 1.1.10

* **Оновлено**: Версію iOS збільшено до 1.1.116.

### Version 1.1.8

* **Оновлено**: Оновлено до найновішої версії React Native.


# Flutter SDK

Ласкаво просимо до документації Identomat Flutter SDK! Тут ви знайдете все необхідне для безшовної інтеграції наших рішень з верифікації особи та KYC/AML у ваш Flutter-застосунок.

{% hint style="info" %}
Остання версія: **Version** **0.0.16**
{% endhint %}

## Огляд&#x20;

Identomat Flutter SDK надає інтерфейс Flutter для запуску сесії верифікації Identomat у мобільному застосунку за допомогою ключа сесії.&#x20;

SDK відповідає за:&#x20;

* Ініціалізацію потоку верифікації Identomat&#x20;
* Запуск інтерфейсу верифікації&#x20;
* Комунікацію з нативною реалізацією Identomat&#x20;

## Початок роботи

### Додайте залежність&#x20;

Виконайте цю команду:&#x20;

```shellscript
 $ flutter pub add identomat_flutter
```

Це додасть такий рядок до `pubspec.yaml` вашого пакета (і виконає неявний `flutter pub get`):

```
dependencies:
  identomat_flutter: ^0.0.16
```

Альтернативно, ваш редактор може підтримувати `flutter pub get`. Перевірте документацію вашого редактора, щоб дізнатися більше.

### Імпортуйте його

У вашому коді Dart ви можете використати:

```
import 'package:identomat_flutter/identomat.dart';
import 'package:identomat_flutter/identomat_flutter_method_channel.dart';
import 'package:identomat_flutter/identomat_flutter_platform_interface.dart';
```

## Приклад

**example/lib/main.dart**

```
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:identomat_flutter/identomat.dart';
import 'package:identomat_flutter_example/data.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final identomat = Identomat();
  TextEditingController myController = TextEditingController();
  final formKey = GlobalKey<FormState>();

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState(String sesstionKey) async {
    identomat.setCallback(
      () {
        print('===========>>> ONCALL');
      },
    );
    await identomat.setBaseUrl(data['baseUrl']);
    await identomat.setColors(data['colors']);
    await identomat.setStrings(data['strings']);
    await identomat.start(sesstionKey);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: Form(
              key: formKey,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextFormField(
                    controller: myController,
                    decoration:
                        const InputDecoration(hintText: 'Enter session key'),
                    validator: (text) {
                      if (text == null || text.trim().isEmpty) {
                        return 'Session key is empty';
                      }
                      return null;
                    },
                  ),
                  const SizedBox(
                    height: 20,
                  ),
                  ElevatedButton(
                    onPressed: () {
                      FocusManager.instance.primaryFocus?.unfocus();
                      if (formKey.currentState!.validate()) {
                        initPlatformState(myController.text.trim());
                      }
                    },
                    child: const Text('Click'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
```


# Flutter SDK changelog

Слідкуйте за змінами та оновленнями Flutter SDK.

{% hint style="info" %}
**Критичні зміни (Breaking changes) позначені жирним шрифтом.**
{% endhint %}

### Version 0.0.16

*Випущено 25 берез. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.158, а версію Android — до 1.1.179.

### Version 0.0.15

*Випущено 16 лют. 2026*

* **Оновлено**: Версію Android збільшено до 1.1.175.

### Version 0.0.14

*Випущено 13 лют. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.154, а версію Android — до 1.1.174.

### Version 0.0.13

*Випущено 03 лют. 2026*

* **Оновлено**: Версію iOS збільшено до 1.1.153, **додано підтримку зчитувача NFC.**
* **Оновлено**: Версію Android збільшено до 1.1.172, **додано підтримку зчитувача NFC**.

### Version 0.0.11

*Випущено 23 груд. 2025*

* **Оновлено**: Версію Android збільшено до 1.1.166.

### Version 0.0.10

*Випущено 18 груд. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.152, а версію Android — до 1.1.164.

### Version 0.0.9

*Випущено 13 жовт. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.148, а версію Android — до 1.1.160.
* **Додано: Можливість включити крок Geolocation.**
* **Додано: Можливість включити крок Proof of Address.**

### Version 0.0.7

*Випущено 30 лип. 2025*

* **Оновлено**: Версію iOS збільшено до 1.1.133, а версію Android — до 1.1.147.
* **Додано: Можливість включити крок опитувальника користувача.**
* **Додано: Можливість запускати сесії за допомогою попередньо визначеної конфігурації.**

### Version 0.0.6

* **Оновлено**: До найновішої бібліотеки Android 1.1.122

### Version 0.0.5 <a href="#id-005" id="id-005"></a>

* **Оновлено:** До найновішої бібліотеки iOS 1.1.114, видалено залежність WebRTC.

### Version 0.0.4 <a href="#id-005" id="id-005"></a>

* **Додано:** Підтримку функціональності Proof of Address.

### Version 0.0.3 <a href="#id-005" id="id-005"></a>

* **Виправлено**: Базові тести.

### Version 0.0.2 <a href="#id-005" id="id-005"></a>

* **Додано**: Документацію API та пакета.
* **Додано**: Приклад.
* **Додано**: Підтримувану ліцензію.

### Version 0.0.1 <a href="#id-005" id="id-005"></a>

* **Оновлено**: Зіставлено більшість важливих методів API.


# Overview

Рішення для живих відеодзвінків з одним чи декількома учасниками, з вбудованими модулями eKYC.

## Огляд

[Відео-KYC](https://www.identomat.com/products/video-kyc) дозволяє проводити верифікацію особи через живі відеодзвінки за участю оператора. Це забезпечує відповідність вимогам KYC, водночас надаючи швидкий, віддалений досвід залучення клієнтів.

Identomat підтримує як одноосібні, так і багатокористувацькі сесії відео-KYC, кожна з яких адаптується до вашого робочого процесу та регуляторних потреб.

#### **Дзвінок один на один**

Сесія відео-KYC один на один з'єднує клієнта безпосередньо з оператором верифікації.\
Під час дзвінка оператор виконує дії з верифікації в реальному часі — наприклад:

* Верифікація документа
* Перевірка живості
* Перегляд даних та опитувальники

Після завершення верифікації оператор може затвердити або відхилити сесію відповідно до заздалегідь визначених правил.

#### **Багатокористувацький дзвінок**

Багатокористувацькі сесії дозволяють верифікувати декількох учасників у межах однієї сесії відео-KYC.\
Кожен учасник проходить незалежний, настроюваний робочий процес.\
Це налаштування зазвичай використовується для бізнес- чи юридичних процесів, що включають декілька сторін, наприклад:

* Корпоративний onboarding
* Заявки на іпотеку чи спільний рахунок
* Реєстрація права власності чи майна

***

### **Відео-KYC може включати такі кроки:**

* Верифікація документа, що посвідчує особу
* Виявлення живості
* Перевірка AML (протидія відмиванню коштів) та негативних медіа
* Підтвердження адреси
* Верифікація через SMS та email
* Опитувальники користувача та оператора

Ці функції разом забезпечують надійну та комплексну верифікацію особи під час процесу відео-KYC.

***

#### **Ключові функції**

* **Настроювані робочі процеси** — Визначайте точний шлях верифікації для кожного випадку використання.
* **Підтримка багатьох користувачів** — Верифікуйте декількох осіб в межах однієї сесії.
* **Дії оператора в реальному часі** — Оператори можуть запускати кроки верифікації наживо під час дзвінка.
* **Аудит та відповідність вимогам** — Кожен дзвінок та подія верифікації логуються для цілей аудиту.
* **Масштабована архітектура** — Побудована для безпечної обробки великих обсягів одночасних сесій.

***

#### **Ключові переваги:**

* **Підвищена безпека**: Відео-KYC пропонує безпечну платформу для верифікації особи клієнтів, знижуючи ризик крадіжки особистих даних та шахрайської діяльності.
* **Економічна ефективність**: Знижує операційні витрати, пов'язані з традиційними особистими процесами KYC, такими як витрати на подорожі та інфраструктуру.
* **Зручність**: Клієнти можуть проходити процес KYC віддалено з будь-якого місця з доступом до Інтернету, усуваючи потребу


# Create video KYC session

Цей посібник проведе вас через створення та поширення сесії Video KYC в Identomat Manage — від входу в систему до надсилання посилання на верифікацію вашому кінцевому користувачу.

## Перш ніж почати

Переконайтеся, що у вас є таке:

* **Обліковий запис Identomat Manage.** Якщо у вас його ще немає, зверніться до вашого адміністратора або до команди Identomat.
* **Конфігурація Video KYC.** Конфігурації визначають кроки верифікації, які пройде ваш кінцевий користувач. Ваш адміністратор налаштовує їх. Якщо жодної ще немає, запросіть її перед тим, як продовжити.

***

### Увійдіть у Manage

1. Перейдіть до Identomat [Manage](https://manage.identomat.com/).
2. Введіть вашу **електронну адресу** та **пароль**.
3. Натисніть **Sign in**, щоб отримати доступ до вашого облікового запису.

### Створіть нову сесію

Після входу та за наявності конфігурації:

1. Перейдіть на сторінку **Sessions** у лівій бічній панелі.
2. Натисніть **+ New session** у верхньому правому куті.
3. У вікні, що з'явиться, заповніть таке:
   * **Configuration** *(обов'язково)* – Оберіть робочий процес Video KYC, який ви хочете використати.
   * **Session Name** *(необов'язково)* – Додайте внутрішню мітку, щоб пізніше було легше ідентифікувати цю сесію.
4. Натисніть **Generate link**.

### Поділіться посиланням на сесію

Після генерації посилання у вас є декілька варіантів надання його кінцевому користувачу:

* **Скопіювати та поділитися вручну** — Скопіюйте URL та надішліть його через ваш бажаний канал.
* **Надіслати через SMS чи email** — Identomat може ініціювати доставку через вашу власну систему повідомлень. Щоб увімкнути це, налаштуйте URL колбеків у ваших **налаштуваннях компанії**. Після налаштування ви отримуватимете [колбеки](/identomat-documentation-ukr/kolbeki) для доставки посилання та дій користувача. Див. Колбеки для інструкцій з налаштування.

Декілька речей, які варто пам'ятати:

* Посилання залишається доступним у перегляді деталей сесії, якщо вам потрібно отримати його пізніше.
* Термін дії посилання контролюється вашою конфігурацією робочого процесу. Зверніться до вашого адміністратора, якщо не впевнені, як довго посилання залишається активним.


# End-user side

Ця сторінка пояснює, що переживатимуть кінцеві користувачі під час сесії Video KYC — від відкриття посилання до завершення верифікації.

## Вимоги

Перш ніж почати, користувачі мають підготувати таке:

<table data-header-hidden><thead><tr><th width="176.46484375"></th><th></th></tr></thead><tbody><tr><td>💻 <strong>Пристрій</strong></td><td>Пристрій із робочою камерою та мікрофоном</td></tr><tr><td>🪪 <strong>Документ</strong></td><td>Дійсний документ, що посвідчує особу — паспорт, ID-картка, посвідка на проживання чи водійське посвідчення</td></tr><tr><td>🌞 <strong>Освітлення</strong></td><td>Добре освітлене середовище</td></tr><tr><td>🛜 <strong>З'єднання</strong></td><td>Стабільне інтернет-з'єднання</td></tr></tbody></table>

## Сесія один на один

### Приєднання до дзвінка

Коли користувач відкриває своє посилання на Video KYC:

1. Віджет верифікації Identomat автоматично запускається в браузері за замовчуванням.
2. Залежно від конфігурації, користувачу може знадобитися виконати попередні кроки — наприклад, переглянути та погодитися з умовами — перед продовженням.
3. Коли все готово, з'являється **вікно відеодзвінка** з нижньою панеллю, що містить:

<table><thead><tr><th width="157.7265625">Елемент керування</th><th width="452.93359375">Функція</th></tr></thead><tbody><tr><td><strong>Audio</strong></td><td>Увімкнути / вимкнути мікрофон</td></tr><tr><td><strong>Video</strong></td><td>Увімкнути / вимкнути камеру</td></tr><tr><td><strong>Flip</strong></td><td>Віддзеркалити зображення з камери</td></tr><tr><td><strong>Switch</strong></td><td>Перемкнутися між фронтальною та тильною камерою <em>(якщо доступно)</em></td></tr><tr><td><strong>Join</strong></td><td>З'єднатися з оператором та почати дзвінок</td></tr></tbody></table>

4\. Користувач натискає \*\*Join\*\*, щоб ініціювати дзвінок. Показується екран \*\*Connecting\*\*, доки оператор не відповість.

Після з'єднання стає видимою верхня панель із:

* **Тривалістю дзвінка** — відображається у верхньому лівому куті
* **Налаштуваннями пристрою** — коригуйте камеру, мікрофон та динамік під час дзвінка
* **Повноекранним режимом** — перемикайте розмір вікна відео

Відео оператора з'являється в куті вікна, обведене жовтим кольором для позначення активного з'єднання.

### Під час дзвінка

Оператор проводить інтерв'ю з верифікації в реальному часі. Залежно від налаштованого робочого процесу, користувачеві може бути запропоновано:

* Показати свій документ, що посвідчує особу
* Пройти перевірку живості
* Відповісти на додаткові запитання верифікації

Усі кроки відбуваються в межах вікна відеодзвінка — без окремих екранів чи перенаправлень.

### Завершення дзвінка

Після завершення верифікації оператор зазвичай повідомляє результат. Будь-яка сторона може завершити дзвінок:

1. Натисніть **End**.
2. Підтвердьте у вікні, що з'явиться.

### Багатокористувацька сесія

Багатокористувацькі сесії дотримуються того самого потоку, що й сесії один на один, з двома ключовими відмінностями:

* **Учасники можуть бачити та чути одне одного**, окрім взаємодії з оператором.
* **Кожен учасник одночасно проходить свій власний робочий процес верифікації** — кроки незалежні, навіть у межах спільного дзвінка.


# Operator side

Що відбувається після того, як оператор приймає дзвінок

## Вимоги

Для проведення сесій Video KYC оператори мають мати:

<table data-header-hidden><thead><tr><th width="151.78515625"></th><th width="410.5390625"></th></tr></thead><tbody><tr><td>💻 <strong>Пристрій</strong></td><td>Пристрій із робочою камерою та мікрофоном</td></tr><tr><td>🌞 <strong>Освітлення</strong></td><td>Добре освітлене середовище</td></tr><tr><td>🛜 <strong>З'єднання</strong></td><td>Стабільне інтернет-з'єднання</td></tr></tbody></table>

### Приймання дзвінка

Оператори створюють чи планують сесії через інтерфейс Manage. Після налаштування сесії її можна узгодити з заявником на конкретний час або залишити відкритою, щоб він приєднався, коли буде готовий.

Коли заявник відкриває своє посилання та натискає **Join**, оператор отримує вхідний дзвінок та відповідає, щоб почати процес Video KYC.

## Сесія один на один

### **Вікно відеодзвінка**

Після з'єднання оператор бачить вікно відеодзвінка, що показує обидві сторони. Вікно має дві панелі керування.

#### **Верхня панель**

<table><thead><tr><th width="200.8671875">Елемент керування</th><th width="428.1953125">Функція</th></tr></thead><tbody><tr><td><strong>Call duration</strong></td><td>Показує тривалість дзвінка, що минула</td></tr><tr><td><strong>Virtual backgrounds</strong></td><td>Застосуйте або налаштуйте користувацький фон під час дзвінка</td></tr><tr><td><strong>Device settings</strong></td><td>Налаштуйте камеру, мікрофон та динамік</td></tr><tr><td><strong>Full screen</strong></td><td>Розгорніть або згорніть вікно відеодзвінка</td></tr></tbody></table>

> Віртуальні фони налаштовуються адміністратором компанії в **Company settings**.

#### **Нижня панель**

<table><thead><tr><th width="127.8125">Елемент керування</th><th>Функція</th></tr></thead><tbody><tr><td><strong>Audio</strong></td><td>Увімкнути / вимкнути мікрофон</td></tr><tr><td><strong>Video</strong></td><td>Увімкнути / вимкнути камеру</td></tr><tr><td><strong>Capture</strong></td><td>Зробіть живий знімок екрана заявника — автоматично зберігається в сесії</td></tr><tr><td><strong>Steps</strong></td><td>Оберіть, які кроки верифікації має пройти заявник</td></tr><tr><td><strong>Start</strong></td><td>Ініціюйте обраний крок на екрані заявника</td></tr></tbody></table>

Оператори можуть повторювати кроки за потреби. Кроки також можна повторно ініціювати, якщо результат потрібно перезняти.

### **Завершення сесії**

Після завершення всіх кроків:

1. Перегляньте інформацію заявника та результати верифікації.
2. Прийміть рішення **Approve** чи **Reject** сесії.

> Рішення мають відповідати протоколам верифікації вашої компанії. Система надає рекомендації на основі завершених перевірок — включно зі скануванням документа, виявленням живості та будь-якими додатковими кроками робочого процесу.

***

### Багатокористувацька сесія

Багатокористувацькі сесії дотримуються того самого потоку, що й сесії один на один, з такими доповненнями:

* До сесії може приєднатися до **10 учасників**, залежно від конфігурації вашого бізнес-процесу.
* Оператор бачить усіх учасників одночасно у вікні відеодзвінка.
* Кроки верифікації можна ініціювати **окремо для кожного учасника** — кожен учасник проходить свій власний робочий процес у межах спільного дзвінка.
* Наприкінці оператор затверджує чи відхиляє консолідовану **батьківську сесію**, відповідно до протоколу компанії.


