Skip to content

IDV Configuration

The IDV Platform configuration is managed via a single config.yaml file.

It is the preferred and central approach to define service behavior, integrations, storage options, and internal scheduling.

Structure

└── mode
└── fernetKey
└── baseUrl
└── identifier
└── metrics
└── logging
└── storage
└── mobile
└── smtp
└── oauth2
└── faceSearch
└── textSearch
└── services
└── mongo
└── messageBroker
└── webApp
└── custom

You can find the example of the configuration file at the bottom of the page.

Basic Parameters

Parameter Type Default Description
mode string cluster Mode of operation: cluster for distributed deployments, standalone for local development.
fernetKey string Secret key used for encrypting sensitive data in the database.
baseUrl string Base URL where the service is accessible, used in email templates and redirects.
identifier string Optional server identifier used in sessions.
custom object Arbitrary user-defined configuration values that can be used in templates.

Metrics

This section configures performance and usage metrics collection, including StatsD and database-based storage.

metrics
├── statsd
│   ├── enabled
│   ├── host
│   ├── port
│   └── prefix
└── alerts
    ├── enabled
    └── prometheus
        ├── url
        └── filter
            └── groups
Parameter Type Default Description
statsdenabled boolean false Whether to enable StatsD for metrics collection.
statsdhost string localhost StatsD server hostname.
statsdport integer 9125 StatsD server port.
statsdprefix string Prefix for metrics.
alertsenabled boolean false Whether to enable access to alerts via the API.
alertsprometheusurl string Prometheus server URL for alerts.
alertsprometheusfiltergroups list[str] Alert groups to filter.

Logging

This section defines the logging behavior, including format, log level, output destinations (console/file), and file management settings.

logging
├── level
├── formatter
├── console
├── file
├── path
├── maxFileSize
└── filesCount
Parameter Type Default Description
level string INFO Logging level.
formatter string Format for log output.
console boolean true Whether to enable logging to console.
file boolean false Whether to enable logging to file.
path string "logs" Path for storing log files.
maxFileSize string 1048576 Maximum size of each log file. Supports floating-point format (for example, "1e6") and memory expressions (for example, "10Mi").
filesCount integer 10 Number of log files to retain.

Storage

The storage section defines the main storage backends (for example, S3 or local file system) and specifies bucket paths for storing various data types like sessions, persons, workflows, user files, and localization configs.

storage
├── type
├── s3
│   ├── endpoint
│   ├── accessKey
│   ├── accessSecret
│   ├── region
│   └── secure
├── fs
│   └── path
├── sessions
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
├── persons
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
├── idags
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
├── workflows
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
├── userFiles
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
├── locales
│   └── location
│       ├── bucket
│       ├── prefix
│       └── folder
└── assets
    └── location
        ├── bucket
        ├── prefix
        └── folder
Parameter Type Default Description
type string s3 Storage backend: s3 or fs.
s3endpoint string S3-compatible endpoint URL.
s3accessKey string Access key for S3.
s3accessSecret string Secret key for S3.
s3region string eu-central-1 Storage region.
s3secure boolean true Use HTTPS connection.
fspath string Local file system path for data.
sessions object Stores user session data.
sessionslocationbucket string Bucket name for session data.
sessionslocationprefix string Path prefix for session data.
sessionslocationfolder string Subfolder for session data.
persons object Stores biometric/person-related files.
personslocationbucket string Bucket name for person-related files.
personslocationprefix string Path prefix for person-related files.
personslocationfolder string Subfolder for person-related files.
idags object Stores IDAG files.
idagslocationbucket string Bucket name for IDAG files.
idagslocationprefix string Path prefix for IDAG files.
idagslocationfolder string Subfolder for IDAG files.
workflows object Stores predefined scenario workflows.
workflowslocationbucket string Bucket name for workflows.
workflowslocationprefix string Path prefix for workflows.
workflowslocationfolder string Subfolder for workflows.
userFiles object Stores uploaded user documents.
userFileslocationbucket string Bucket name for user files.
userFileslocationprefix string Path prefix for user files.
userFileslocationfolder string Subfolder for user files.
locales object Stores localization files for translation.
localeslocationbucket string Bucket name for localization files.
localeslocationprefix string Path prefix for localization files.
localeslocationfolder string Subfolder for localization files.
assets object Stores asset files.
assetslocationbucket string Bucket name for asset files.
assetslocationprefix string Path prefix for asset files.
assetslocationfolder string Subfolder for asset files.

Mobile

The mobile section defines identifiers and security hashes for the Android and Apple apps to verify and link official mobile clients.

mobile
├── android
│   ├── bundleId
│   └── sha256
│       ├── \[0]
│       ├── \[1]
│       └── \[2]
└── apple
│   ├── appId
│   ├── bundleId

Mobile Parameters

Parameter Type Default Description
androidbundleId string Android application ID.
androidsha256 list App certificate fingerprints for security.
appleappId string Apple app ID.
applebundleId string Apple bundle ID.

SMTP

The smtp section configures email delivery settings such as SMTP host, port, credentials, and TLS for sending system emails (for example, verifications or alerts).

smtp
├── enabled
├── host
├── port
├── username
├── password
└── tls
Parameter Type Default Description
enabled boolean true Whether to enable sending emails.
host string SMTP server host.
port integer 587 SMTP server port.
username string Credentials for SMTP authentication.
password string Credentials for SMTP authentication.
tls boolean false Whether to enable TLS encryption.

OAuth2

The oauth2 section defines external OAuth 2.0 identity providers (for example, Google, Microsoft, Cognito) for user authentication, with roles, scopes, and endpoint URLs.

Before configuring OAuth2, obtain credentials (client ID and secret) from your provider, for example in the Google API Console. You will also need provider-specific endpoint URLs.

oauth2
├── enabled
├── accessTokenTtl
└── providers
    ├── [0]
    │   ├── name
    │   ├── type
    │   ├── clientId
    │   ├── secret
    │   ├── scope
    │   ├── defaultRoles
    │   ├── defaultGroups
    │   └── urls
    │       ├── jwk
    │       ├── authorize
    │       ├── token
    │       ├── refresh
    │       └── revoke
    └── [1]
        └── (same structure as above)
Parameter Type Default Description
enabled boolean false Enables OAuth2 authentication. If false, OAuth2 will not work.
accessTokenTtl int 3600 Time-to-live of the access token in seconds.
providers list empty list List of provider configurations.
providersname string Unique name of the provider. Becomes part of the callback URL.
providerstype string Provider type: google, microsoft, or cognito.
providersclientId string Client ID obtained from the provider. Used to identify the platform.
providerssecret string Client secret obtained from the provider. Used to authenticate the platform.
providersscope string Space-separated list of requested permissions (for example, openid email profile).
providersdefaultRoles list Roles assigned to new users.
providersdefaultGroups list Groups assigned to new users. Groups that don’t exist will be created automatically.
providersurlsjwk string JSON Web Key Set (JWKS) endpoint. Returns the public keys used by the provider to sign tokens. The platform uses these to verify token integrity.
providersurlsauthorize string Authorization endpoint. Users are redirected here to log in and grant consent.
providersurlstoken string Token endpoint. Used to exchange an authorization code for an access token (and refresh token).
providersurlsrefresh string Refresh token endpoint. Used to obtain a new access token using a valid refresh token. Often the same as the token endpoint.
providersurlsrevoke string Token revocation endpoint. Allows invalidating access or refresh tokens before expiry.

faceSearch

Enables facial recognition and search capabilities using a vector database (for example, OpenSearch), with thresholds and matching parameters.

faceSearch
├── enabled
├── limit
├── threshold
└── database
    ├── type
    ├── opensearch
    │   ├── host
    │   ├── port
    │   ├── useSsl
    │   ├── verifyCerts
    │   ├── username
    │   ├── password
    │   ├── dimension
    │   ├── indexName
    │   └── awsAuth
    │       ├── enabled
    │       └── region
    └── atlas
        └── dimension
Parameter Type Default Description
enabled boolean false Whether to enable facial recognition search.
limit integer 1000 Max number of search results.
threshold float 0.75 Similarity threshold.
databasetype string opensearch Database type: opensearch or atlas.
databaseopensearchhost string Hostname of OpenSearch.
databaseopensearchport integer 9200 Port for OpenSearch.
databaseopensearchuseSsl boolean false Use SSL connection.
databaseopensearchverifyCerts boolean false Whether to enable SSL certificates verification.
databaseopensearchusername string Username.
databaseopensearchpassword string Password.
databaseopensearchdimension integer 512 Feature vector size.
databaseopensearchindexName string Index used for face vectors.
databaseopensearchawsAuthenabled boolean false Whether to use AWS authentication when connecting to the OpenSearch service.
databaseopensearchawsAuthregion string AWS region (for example, us-east-1).
databaseatlasdimension integer 512 Feature vector size for Atlas.

textSearch

Enables full-text search capabilities using a search database, for example, OpenSearch.

textSearch
├── enabled
├── limit
└── database
    ├── type
    ├── opensearch
    │   ├── host
    │   ├── port
    │   ├── useSsl
    │   ├── verifyCerts
    │   ├── username
    │   └── password
    └── atlas
Parameter Type Default Description
enabled boolean false Whether to enable text search.
limit integer 1000 Max number of search results.
databasetype string opensearch Database type: opensearch or atlas.
databaseopensearchhost string Hostname of OpenSearch.
databaseopensearchport integer 9200 Port for OpenSearch.
databaseopensearchuseSsl boolean false Use SSL connection.
databaseopensearchverifyCerts boolean false Whether to enable SSL certificates verification.
databaseopensearchusername string OpenSearch Username.
databaseopensearchpassword string OpenSearch Password.

services

Toggles key microservices like API, audit logging, scheduler, workflow engine, and third-party integrations, such as docreader, faceapi.

services
├── api
│   ├── enabled
│   ├── port
│   ├── host
│   └── workers
├── audit
│   ├── enabled
│   └── wsEnabled
├── scheduler
│   ├── enabled
│   └── jobs
│       ├── expireSessions
│       │   └── cron
│       ├── reloadWorkflows
│       │   └── cron
│       ├── cleanSessions
│       │   ├── cron
│       │   └── keepFor
│       ├── expireDeviceLogs
│       │   ├── cron
│       │   └── keepFor
│       ├── reloadLocales
│       │   └── cron
│       └── cronWorkflow
│           └── cron
├── workflow
│   ├── enabled
│   └── workers
├── analytics
│   ├── enabled
│   └── connectionString
├── docreader
│   ├── enabled
│   ├── prefix
│   └── url
├── faceapi
│   ├── enabled
│   ├── prefix
│   └── url
└── indexer
    ├── enabled
    ├── timeout
    └── maxBatchSize
Service Type Default Description
apienabled boolean true Whether to enable the main HTTP API service.
apiport integer 8000 TCP port for API server.
apihost string 0.0.0.0 Network interface or IP for API binding.
apiworkers integer/string auto Number of workers handling API requests.
auditenabled boolean false Enables audit logging service.
auditwsEnabled boolean false Enables WebSocket-based audit streaming to a client.
schedulerenabled boolean true Enables the scheduler service for background jobs.
schedulerjobsexpireSessionscron string (cron) Frequency for expiring inactive sessions.
schedulerjobsreloadWorkflowscron string (cron) Frequency for reloading workflow definitions.
schedulerjobscleanSessionscron string (cron) Frequency for cleaning expired sessions.
schedulerjobscleanSessionskeepFor string (duration) Retention period for session data (for example, 1w).
schedulerjobsexpireDeviceLogscron string (cron) Frequency for expiring device logs.
schedulerjobsexpireDeviceLogskeepFor string (duration) Retention period for device logs.
schedulerjobsreloadLocalescron string (cron) Frequency for reloading localization files.
schedulerjobscronWorkflowcron string (cron) Frequency for cron workflows.
workflowenabled boolean true Enables workflow execution service.
workflowworkers integer/string auto Number of workers for workflow service.
analyticsenabled boolean false Enables analytics service.
analyticsconnectionString string Connection string for analytics database.
docreaderenabled boolean false Enables DocReader SDK integration.
docreaderprefix string URL path prefix for DocReader.
docreaderurl string Internal URL of DocReader service.
faceapienabled boolean false Enables FaceAPI integration.
faceapiprefix string URL path prefix for FaceAPI.
faceapiurl string Internal URL of FaceAPI service.
indexerenabled boolean false Enables indexer service.
indexertimeout integer 60 Time to wait between two batches of indexer operations.
indexermaxBatchSize integer 1000 Maximum batch size for indexer.

mongo

Defines the MongoDB connection URL used to store and access application data.

mongo
└── url
Parameter Type Default Description
url string mongodb://localhost:27017/idv MongoDB connection string.

messageBroker

Defines message broker (for example, RabbitMQ) connection URL used for event-driven communication between services.

messageBroker
└── url
Parameter Type Default Description
url string amqp://admin:admin@localhost:5672/ AMQP Message Broker connection string.

webApp

Controls the embedded IDV Portal application.

webApp
└── enabled
Parameter Type Default Description
enabled boolean true Whether to serve IDV Portal application.

Config File Example

config.yaml
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
mode: cluster
fernetKey: "z82-gpAZjBkCmwE8GJjB-Lt5kJZi9ARAI2uXTRGtEfQ="
identifier: "PQT"
baseUrl: "https://dev-idv.regulaforensics.com"

custom:
  someExternalServiceBaseUrl: https://example.com/api/

metrics:
  statsd:
    enabled: true
    host: statsd
    port: 9125
    prefix: "idv"

logging:
  level: INFO
  formatter: "%(asctime)s.%(msecs)03d - %(name)s - %(levelname)s - %(message)s"
  console: true
  file: false
  path: "/var/log"
  maxFileSize: 1.048576e7
  filesCount: 10

storage:
  type: s3
  s3:
    endpoint: http://minio:9000
    accessKey: "minioadmin"
    accessSecret: "minioadmin"
    region: "master"
    secure: false

  fs:
    path: /var/idv/data

  sessions:
    location:
      bucket: "coordinator"
      prefix: "sessions"
      folder: ""

  persons:
    location:
      bucket: "coordinator"
      prefix: "persons"
      folder: "person_files"

  idags:
    location:
      bucket: "coordinator"
      prefix: "idags"
      folder: "idag_data"

  workflows:
    location:
      bucket: "coordinator"
      prefix: "workflows"
      folder: ""

  userFiles:
    location:
      bucket: "coordinator"
      prefix: "files"
      folder: "user_files"

  locales:
    location:
      bucket: "coordinator"
      prefix: "localization"
      folder: "config"

  assets:
    location:
      bucket: "coordinator"
      prefix: "assets"
      folder: "assets_data"

mobile:
  android:
    bundleId: com.regula.app.idv
    sha256:
    - 60:92:AB:C1:E3:F1:53:5D:94:A8:CA:E5:40:85:8C:9B:3F:4A:30:99:44:88:08:1A:11:94:A0:71:6F:34:90:51
    - ED:88:29:A8:4C:7B:5B:C9:2B:5C:31:75:41:C5:F7:C4:0D:8E:A4:71:C8:86:60:E5:9E:B2:C5:CB:85:F8:C2:C4
    - 14:66:5E:B5:46:C6:0E:54:92:AA:80:85:DF:E4:6E:A4:9A:9B:B7:B5:EB:67:AD:EF:0F:AE:E2:D4:79:6C:74:7F
  apple:
    appId: "6737484022"
    bundleId: H6WR54S268.com.regula.app.idv

smtp:
  enabled: true
  host: <smtp server>
  port: 587
  username: <user name>
  password: <password>
  tls: true

oauth2:
  enabled: true
  accessTokenTtl: 3600
  providers:
    - name: google
      type: google
      clientId: "<app_id>.apps.googleusercontent.com"
      secret: "<client_secret>"
      scope: "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
      defaultRoles: ["demo"]
      defaultGroups: ["Demo", "Users"]
      urls:
        jwk: "https://www.googleapis.com/oauth2/v3/certs"
        authorize: "https://accounts.google.com/o/oauth2/auth"
        token: "https://accounts.google.com/o/oauth2/token"
        refresh: "https://accounts.google.com/o/oauth2/token"
        revoke: "https://accounts.google.com/o/oauth2/revoke"

    - name: azure
      type: microsoft
      clientId: "<app_id>"
      secret: "<client_secret>"
      scope: "email openid profile User.Read"
      defaultRoles: ["admin"]
      defaultGroups: []
      urls:
        jwk: "https://login.microsoftonline.com/<tenant_id>/discovery/v2.0/keys"
        authorize: "https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/authorize"
        token: "https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token"
        refresh: "https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token"
        revoke: "https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/revoke"

    - name: cognito
      type: cognito
      clientId: "<app_id>"
      secret: "<client_secret>"
      scope: "openid email profile"
      defaultRoles: ["user"]
      defaultGroups: ["CognitoUsers"]
      urls:
        jwk: "https://cognito-idp.<region>.amazonaws.com/<user_pool_id>/.well-known/jwks.json"
        authorize: "https://<domain>.auth.<region>.amazoncognito.com/oauth2/authorize"
        token: "https://<domain>.auth.<region>.amazoncognito.com/oauth2/token"
        refresh: "https://<domain>.auth.<region>.amazoncognito.com/oauth2/token"
        revoke: "https://<domain>.auth.<region>.amazoncognito.com/oauth2/revoke"

faceSearch:
  enabled: true
  limit: 1000
  threshold: 0.75
  database:
    type: opensearch
    opensearch:
      host: "opensearch"
      port: 9200
      useSsl: false
      verifyCerts: false
      username: "admin"
      password: ""
      dimension: 512
      indexName: "hnsw"
      awsAuth:
        enabled: false
        region: ""
        accessKey: ""
        secretKey: ""


textSearch:
  enabled: true
  limit: 1000
  database:
    type: opensearch
    opensearch:
      host: "opensearch"
      port: 9200
      useSsl: false
      verifyCerts: false
      username: admin
      password: ""
      awsAuth:
        enabled: false
        region: ""
        accessKey: ""
        secretKey: ""
  atlas:
    dimension: 512


services:
  api:
    enabled: true
    port: 8000
    host: "0.0.0.0"
    workers: auto

  analytics:
    enabled: true
    connectionString: http://username:password@db-host:8123/idv

  audit:
    enabled: true
    wsEnabled: true

  scheduler:
    enabled: true
    jobs:
      expireSessions:
        cron: "*/10 * * * * *"
      reloadWorkflows:
        cron: "*/5 * * * * *"
      cleanSessions:
        cron: "*/30 * * * * *"
        keepFor: "1w" # 5s, 10m, 15w, 1y, 1w, 30d, 1h, 2m, 3s
      expireDeviceLogs:
        cron: "*/5 * * * *"
        keepFor: "30d"
      reloadLocales:
        cron: "*/15 * * * * *"
      cronWorkflow:
        cron: "*/30 * * * * *"

  workflow:
    enabled: true
    workers: auto

  docreader:
    enabled: true
    prefix: drapi
    url: "http://docreader.docreader.svc.cluster.local:80"

  faceapi:
    enabled: true
    prefix: faceapi
    url: "http://faceapi.faceapi.svc.cluster.local:80"

  indexer:
    enabled: true
    timeout: 60
    maxBatchSize: 1000

webApp:
  enabled: true

mongo:
  url: mongodb://mongo-username:mongo-password@mongodb:27017/idv?tlsInsecure=true&directConnection=true

messageBroker:
  url: amqp://admin:admin@localhost:5672/