# GBDS API

## Configuration File

The GBDS API configuration parameters are defined in a configuration file containing all parameters and their respective values. Omitted parameters assume their default value. This section describes the properties of the configuration file.

### File Location

The configuration file is located at: `/etc/griaule/conf/gbsapi/gbdsapi.properties`.

### File Properties

The configuration file must follow some requirements so that it can be correctly interpreted by GBDS. These requirements are:

1. The file name and its location must be exactly the same as described in the section [File Location](#localizacao-do-arquivo)
2. There must be only one configuration parameter per line.
3. Each configuration parameter must have the form `{parameter}={value}`, without line breaks;
4. Each value must be separated by a comma when assigned to the same parameter.

## Configuration Parameters

This section describes each of the GBDS API configuration parameters that may be listed in the configuration file and how they affect system operation.

### Security

{% hint style="info" %}
See the GBDS Security Manual for more information about GBDS security settings.
{% endhint %}

#### gbscluster.api.security.enabled

This parameter defines whether the security methods for authentication and authorization are enabled.

**Default Value:**

> `true`

**Possible values:**

> * `true`
> * `false`

#### gbscluster.api.security.keystore

This parameter defines the path to the *keystore* containing the bind user password *LDAP* and the JTW token signing key.

**Default Value:**

> Empty

#### gbscluster.api.security.ldap.url

This parameter defines the connection URL for the LDAP server.

**Default Value:**

> Empty

#### gbscluster.api.security.ldap.userSearchBase

This parameter defines the *Distinguished Name (DN)* for the user repository on the LDAP server.

**Default Value:**

> Empty

#### gbscluster.api.security.ldap.userSearchAttribute

This parameter defines the user attribute that will be used as the username during authentication.

**Default Value:**

> Empty

#### gbscluster.api.security.ldap.userGroupMembershipAttribute

This parameter defines the user attribute that contains their group membership information.

**Default Value:**

> Empty

#### gbscluster.api.security.ldap.bindUserDN

This parameter defines the *Distinguished Name* of the bind user.

**Default Value:**

> Empty

#### gbscluster.api.security.token.ttlInMilliseconds

This parameter defines the time-to-live, in milliseconds, of the JWT Token.

**Default Value:**

> Empty

**Possible values:**

> `1800000` (30 min) to `10800000` (3 hours)

**Recommended value:**

> `3600000` (1 hour)

#### gbscluster.api.security.authorization.ranger.configurationDirectory

This parameter is optional and defines the directory with GBDS-specific configuration information for Apache Ranger.

**Default Value:**

> Empty

#### gbscluster.api.security.authorization.rolePermissionMapFile

This parameter is optional and defines the file with roles/permissions mapped for GBDS applications.

**Default Value:**

> Empty

### gbds.cluster.kafka.task.topic

This parameter defines the Kafka topic where tasks will be allocated.

**Default Value:**

> `gbds-tasks`

### gbds.cluster.zookeeper.quorum

This parameter defines the *hostname* and the port where the zookeeper server can be found. Each value must be separated by commas if more than one value is available.

**Default Value:**

> `<hostname>:<port>`

### gbscluster.kafka.broker

This parameter defines the Kafka Broker address and must be reflected in the Kafka configurations.

**Default Value:**

> `<hostname>:6667`

### gbscluster.kafka.producer.acks

This parameter defines the number of *acknowledgments* that the producer requires the leader to have received before considering the request complete. This parameter controls the durability of records that are sent.

**Default Value:**

> `1`

**Possible values:**

> * `0`
> * `1`
> * `all`

{% hint style="info" %}
See the [Kafka Documentation](http://kafka.apache.org/documentation.html#producerconfigs) for more information.
{% endhint %}

### gbscluster.kafka.producer.buffer.memory

This parameter defines the total memory the producer can use for buffering records awaiting to be sent to the server, in bytes.

**Default Value:**

> `67108864`

### gbscluster.kafka.producer.batch.size

This parameter defines the maximum batch size that the producer can send in a single request when multiple records are being sent to the same partition.

**Default Value:**

> `8196`

### gbscluster.kafka.consumer.fetch.message.max.bytes

This parameter defines the number of message bytes to attempt to fetch per partition/topic in each fetch request.

**Default Value:**

> `1248576`

### gbscluser.dispatcher.requests.topic

This parameter defines the topic used to listen for new requests. There is no relation between this parameter and *gbscluster.kafka.group*.

**Default Value:**

> `requests`

### gbscluser.dispatcher.requests.nthreads

This parameter defines the number of threads to be used for request consumers. By default, it is set to the number of partitions the requests topic has.

**Default Value:**

> `1`

### gbscluser.dispatcher.requests.partitions

This parameter defines the number of partitions used by Kafka for storing request topics.

**Default Value:**

> `1`

### gbscluser.dispatcher.requests.replication

This parameter defines the replication factor used by Kafka topics.

**Default Value:**

> `3`

### gbscluster.hdfs.person.location

This parameter defines the location where ANSI/NIST XML files will be saved.

**Default Value:**

> `hdfs://<hostname>:8020/tmp/gbscluster/`

### gbscluster.hdfs.host

This parameter defines the HDFS host address and should reflect HDFS configurations.

**Default Value:**

> `hdfs://<hostname or HA nameservice>:8020`

### gbscluster.transport.http.url

This parameter defines the HTTP transport URL.

**Default Value:**

> `http://<hostname>`

### gbscluster.transport.http.port

This parameter defines the HTTP transport port.

**Default Value:**

> `6516`

### gbscluster.search.verify.primary.fingerprints

This parameter defines whether search operations should be performed over fingerprint templates.

**Default Value:**

> `true`

**Possible values:**

> * `true`
> * `false`

### gbscluster.search.verify.primary.faces

This parameter defines whether search operations should be performed over face templates.

**Default Value:**

> `true`

**Possible values:**

> * `true`
> * `false`

### gbscluster.search.verify.primary.iris

This parameter defines whether search operations should be performed over iris templates.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.search.verify.primary.palmprints

This parameter defines whether search operations should be performed over palmprint templates.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.search.verify.primary.newborn-palmprints

This parameter defines whether search operations should be performed over newborn palm templates.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.search.iris.verify.matchthreshold

This parameter defines the minimum score for an iris comparison to be considered a match during a search operation.

**Default Value:**

> `26`

### gbscluster.search.fingerprints.ul.verify.matchthreshold

This parameter defines the minimum score for an UL fingerprint comparison to be considered a match during the search operation.

**Default Value:**

> `35`

### gbscluster.search.palmprints.ul.verify.matchthreshold

This parameter defines the minimum score for a UL palm comparison to be considered a match during the search operation.

**Default Value:**

> `35`

### gbscluster.activate.quality.duplicities

This parameter defines when to consider a registration transaction with duplicates as `ENROLL_FAILED` (`false`) or `ENROLL_PENDING` (`true`).

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.enroll.fingerprints.verify.matchthreshold

This parameter defines the minimum score to consider a 1:1 fingerprint comparison a match during a search operation.

**Default Value:**

> `25`

### gbscluster.enroll.fingerprints.verify.anglethreshold

This parameter defines the angle to be considered when comparing two fingers during a search operation.

**Default Value:**

> `180`

**Range:**

> `0` to `180` (`-1` will have the same effect as `180`)

### gbscluster.update.faces.verify.matchthreshold

This parameter defines the threshold to be used during facial biometric comparisons in search operations. Setting a high value for this parameter may possibly result in an increase in false negatives.

**Default Value:**

> `60`

### gbscluster.enroll.newborn-palmprints.verify.matchthreshold

This parameter defines the minimum score to consider a 1:1 comparison of newborn palmprints a match during a search operation.

**Default Value:**

> `35`

### gbscluster.enroll.fingerprints.ul.anglethreshold

This parameter defines the angle to be considered when comparing two unresolved latent fingerprints.

**Default Value:**

> `180`

**Range**

> `0` to `180` (`-1` will cause the same effect as `180`)

### gbscluster.update.consider.fingerprints

This parameter defines whether fingerprints should be considered when generating update exceptions.

**Default Value:**

> `true`

**Possible values:**

> * `true`
> * `false`

### gbscluster.update.consider.faces

This parameter defines whether face images should be considered when generating update exceptions.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.update.consider.faces.beforeFingerprints

This parameter defines whether faces should be analyzed before fingerprints when generating update exceptions. If `false`, face analysis is done after fingerprint analysis.

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

### gbscluster.update.minimum.fingers

This parameter defines the minimum number of finger matches required for an **update** operation to be accepted.

**Default Value:**

> `4`

### gbscluster.min.quality

This parameter defines the minimum quality required for a fingerprint so that an `ENROLL_PENDING`.

**Default Value:**

> `50`

### gbscluster.update.min.quality

This parameter defines the minimum quality required for a fingerprint so that an `UPDATE_PENDING`.

**Default Value:**

> `50`

### gbds.enroll.fingerprints.min-nr-template

This parameter defines the minimum number of fingerprint templates required for a transaction to be processed. If the transaction does not contain the required number of fingerprints, it will fail.

**Default Value:**

> `0`

### gbds.enroll.faces.min-nr-template

This parameter defines the minimum number of face templates required for the transaction to be processed. If the transaction does not contain the required number of templates, it will fail.

**Default Value:**

> `0`

### gbds.enroll.iris.min-nr-template

This parameter defines the minimum number of iris templates required for the transaction to be processed. If the transaction does not contain the required number of templates, it will fail.

**Default Value:**

> `0`

### gbds.enroll.palmprint.min-nr-template

This parameter defines the minimum number of palmprint templates required for the transaction to be processed. If the transaction does not contain the required number of templates, it will fail.

**Default Value:**

> `0`

### gbds.enroll.newborn-palmprint.min-nr-template

This parameter defines the minimum number of newborn palm templates required for the transaction to be processed. If the transaction does not contain the required number of templates, it will fail.

**Default Value:**

> `0`

### gbscluster.update.fingerprints.verify.matchthreshold

This parameter defines the minimum score to consider a 1:1 fingerprint comparison a match during a verification operation.

**Default Value:**

> `35`

### gbscluster.update.fingerprints.verify.anglethreshold

This parameter defines the angle to be considered when comparing two fingerprints during the verification operation.

**Default Value:**

> `180`

**Range:**

> `0` to `180` (`-1` will have the same effect as `180`)

### gbscluster.enroll.fingerprints.verify.duplicities.matchthreshold

When performing quality verification during the enrollment operation, a comparison between fingers is executed checking duplicates in the transaction.

This parameter defines the minimum score for a verified fingerprint to be considered duplicated when validating between fingers.

**Default Value:**

> `45`

### gbscluster.enroll.fingerprints.verify.sequencecheck.matchthreshold

This parameter defines the minimum threshold for a primary capture to be considered a match against its respective index in the sequence control.

If the comparison between the captured fingers and their respective fingers in the sequence control (for example 4-4-2 or 2-2-1) returns match scores above this threshold, it will be considered a match by the sequence check.

**Default Value:**

> `20`

### gbscluster.enroll.fingerprints.verify.sequencecheck.matchthreshold.\<index>

This parameter defines the minimum score for a specific capture to be considered a match against its respective index in the sequential control.

If the comparison between the finger defined by the index and its respective fingers in the sequence control (for example 4-4-2 or 2-2-1) returns match scores above this threshold, it will be considered a match by the sequence check.

{% hint style="info" %}
This configuration is optional and, if not defined, GBDS will use the global threshold value defined in `gbscluster.enroll.fingerprints.verify.sequencecheck.matchthreshold`.
{% endhint %}

{% hint style="info" %}
This configuration must be repeated in the configuration file for each individual finger for which you want to set a threshold different from the global one.
{% endhint %}

The `<index>` in the configuration must be changed according to the desired finger. The possible values are:

> * left\_little
> * left\_ring
> * left\_middle
> * left\_index
> * left\_thumb
> * right\_thumb
> * right\_index
> * right\_middle
> * right\_ring
> * right\_index

{% hint style="warning" %}
The index must have the STRING format according to the list above. Any other value will be considered invalid and discarded.
{% endhint %}

### gbscluster.enroll.fingerprints.identify.sequencecorrection.matchthreshold

This parameter defines the minimum score for the primary capture to be considered a match when comparing against all other fingerprints in the sequence control.

This comparison is performed after sequence control issues are identified to check if the primary captures are swapped. If the primary capture's fingerprint does not match its respective capture in the sequence control, the system will automatically resolve the issue by cropping the sequence control image and replacing the primary capture.

The maximum number of corrections performed is determined by the parameter \`\`\`gbscluster.enroll.fingerprints.sequencecorrection.maxcorrections`. If the number of corrections is greater than the defined value, no correction will be made for the profile and the transaction status will be set to` PENDING\`.

This parameter defines the minimum score for rolled captures to be considered a match when compared against all flat captures of the sequence control.

**Default Value:**

> `20`

### gbscluster.enroll.fingerprints.identify.sequencecorrection.matchthreshold.\<index>

This parameter defines the minimum score for the primary capture to be considered a match when comparing against all other fingerprints in the sequence control.

This comparison is performed after sequence control issues are identified to check if the primary captures are swapped. If the primary capture's fingerprint does not match its respective capture in the sequence control, the system will automatically resolve the issue by cropping the sequence control image and replacing the primary capture.

The maximum number of corrections performed is determined by the parameter `gbscluster.enroll.fingerprints.sequencecorrection.maxcorrections`. If the number of corrections is greater than the defined value, no correction will be made for the profile and the transaction status will be set to `PENDING`.

{% hint style="info" %} This configuration is optional and, if not defined, GBDS will use the global threshold value defined in `gbscluster.enroll.fingerprints.identify.sequencecorrection.matchthreshold`. {% endhint %}

{% hint style="info" %} This configuration must be repeated in the configuration file for each individual finger for which you want to set a threshold different from the global one. {% endhint %}

The `<index>` in the configuration must be changed according to the desired finger. The possible values are:

> * left\_little
> * left\_ring
> * left\_middle
> * left\_index
> * left\_thumb
> * right\_thumb
> * right\_index
> * right\_middle
> * right\_ring
> * right\_index

{% hint style="warning" %} The index must have the STRING format according to the list above. Any other value will be considered invalid and discarded. {% endhint %}

### gbscluster.enroll.fingerprints.sequencecorrection.maxcorrections

This parameter defines the maximum number of automatic corrections performed before considering a transaction as `PENDING` and sending it for manual review. If the number of corrections required is greater than specified in this parameter, no correction will be performed and the original transaction will be sent for manual review.

**Default Value:**

> `4`

### gbscluster.enroll.fingerprints.sequencecontrol.copy-to-searchable-biometrics

This parameter defines whether the sequence control images should be cropped for enrollments where no individual fingerprint image is available.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.fingerprints.extraction.cab.enabled (deprecated)

{% hint style="warning" %} This configuration was deprecated as of version 4.7.0. See the settings that replace it: `gbscluster.fingerprints.extraction.enroll.type` and `gbscluster.fingerprints.extraction.verify.type`. {% endhint %}

This parameter defines whether the CAB should be extracted for new biometrics.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.fingerprints.extraction.fnet.enabled (deprecated)

{% hint style="warning" %} This configuration was deprecated as of version 4.7.0. See the settings that replace it: `gbscluster.fingerprints.extraction.enroll.type` and `gbscluster.fingerprints.extraction.verify.type`. {% endhint %}

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbscluster.fingerprints.extraction.enroll.type

This parameter defines the ginger extractor preset to be used for Enrollment and Update.

**Default Value:**

> `GRIAULE_2024`

**Possible values:**

> * `GRIAULE_FAST`: simplest and fastest version of GRIAULE\_BASIC (never used in the API).
> * `GRIAULE_BASIC`: old "*…cab.enabled = false*", default extraction for Verification.
> * `GRIAULE_2020`: old "*…cab.enabled = true*", old default extraction for Enrollment, Update.
> * `GRIAULE_2024`: new default extraction for Enrollment, Update.
> * `GRIAULE_2018`: old "*…fnet.enabled = true*".

### gbscluster.fingerprints.extraction.verify.type

This parameter defines the ginger extractor preset to be used for Verification.

**Default Value:**

> `GRIAULE_BASIC`

**Possible values:**

> * `GRIAULE_FAST`: simplest and fastest version of GRIAULE\_BASIC (never used in the API).
> * `GRIAULE_BASIC`: old "*…cab.enabled = false*", default extraction for Verification.
> * `GRIAULE_2020`: old "*…cab.enabled = true*", old default extraction for Enrollment, Update.
> * `GRIAULE_2024`: new default extraction for Enrollment, Update.
> * `GRIAULE_2018`: old "*…fnet.enabled = true*".

### gbds.rdb.driverClassName

This parameter defines the class name used by the relational database to store unresolved latents.

**Default Value:**

> `com.mysql.jdbc.Driver`

### gbds.rdb.url

This parameter defines the URL of the relational database to be accessed.

**Default Value:**

> `jdbc:mysql://<address>:<port>/gbds`

### gbds.rdb.username

This parameter defines the username to be used for access to the relational database.

**Default Value:**

> `root`

### gbds.rdb.password

This parameter defines the password to be used for access to the relational database.

**Default Value:**

> Empty

### gbds.rdb.dialect

This parameter defines the dialect to be used in the relational database.

**Default Value:**

> `org.hibernate.dialect.MySQLDialect`

### gbds.rdb.showSql

This parameter defines whether SQL statements should be included in the application logs.

**Default Value:**

> `false`

**Possible values:**

> * `true`
> * `false`

### gbds.biometric.best-of-biometrics.enabled

This parameter enables best-of-biometrics. When enabled, a person's biometric set is the consolidation of the best biometrics obtained from all the person's transactions over time.

{% hint style="warning" %} This flag **MUST** have the same value in the GBDS and GBDS API configurations. {% endhint %}

**Default Value:**

> `false`

### gbds.biometric.face.template.format

Defines the template format for face.

The possible values are: `TPT_FORMAT_1` or `TPT_FORMAT_2`.

{% hint style="warning" %} Face formats are not interchangeable. Faces enrolled in one format will not match faces made in another format. {% endhint %}

{% hint style="danger" %} The value of this configuration must be the same in the files `application.conf` and `gbdsapi.properties` {% endhint %}

### gbds.peopleList.countFromRDB

This parameter defines the pagination behavior in the API call `people/list`. Set to `true`, the people list will always count the total people using the passed restriction filter. In large databases this can compromise performance. Set to `false` will restrict the response only to the values count, pageSize and currentPage.

**Default Value:**

> `true`

### gbds.person.canDeleteOnException

This parameter allows the deletion of people in exception. It is valid for both the reference and the incoming person.

**Default Value:**

> `false`

### gbds.searches.verify.saveOnRdb.enabled

Defines whether the verify operation will be saved in the `gbds.transaction` RDB table.

**Default Value:**

> `true`

{% hint style="danger" %} This value must be the same in the `application.conf` and in the `gbdsapi.properties` {% endhint %}

### gbds.searches.identify.saveOnRdb.enabled

Defines whether the identify operation will be saved in the `gbds.transaction` RDB table.

**Default Value:**

> `true`

{% hint style="danger" %} This value must be the same in the `application.conf` and in the `gbdsapi.properties` {% endhint %}

### gbds.template.face.multiplicity

Defines whether GBDS will use only one face template format, or new and old simultaneously.

**Default Value:**

> `ONLY_NEWEST`

**Possible Values:**

> * `ONLY_NEWEST` - GBDS will use only the newest template format.
> * `MULTIPLE` - GBDS will use both the old and the new template format.

### gbds.search.verify.adjust-resolution

When this setting is enabled, API verifications and updates and the post-match verification in GBDS will adjust the resolution by performing a match verification, lowering the score on fingers and palms.

**Default Value:**

> `true`

**Possible Values:**

> * `true`
> * `false`

### gbds.update.exception.reextract

This parameter determines re-extraction on updates that would generate exceptions. Only unmatched biometrics are re-extracted from the incoming and reference, but if the configuration to save the re-extraction (*gbds.update.exception.reextract.save*) is `true`, all fingerprint biometrics are re-extracted. Before re-extracting the reference, the API will check if the reference templates have already been extracted with the chosen extractor. If so, re-extraction is not performed.

**Default Value:**

> `NONE`

**Possible Values:**

> * `NONE`, do not re-extract.
> * `REGULAR`, use the current extractor in the reference (currently configured extractor).
> * `GRIAULE_2018`, use GRIAULE\_2018 to re-extract incoming and reference.

### gbds.update.exception.reextract.save

This parameter allows saving re-extractions of query and reference biometrics in the HBase transaction and people. If `true`, it saves the complete templates in the transaction and the master record templates in people, it does not send the templates to GBDS (there is no new TGUID to process). In the RDB transaction, the column `ginger_extractor_type` is updated in the reference and in the query and `extraction_time` is updated in the query (adds the reference and the query extraction time).

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

## Template Extraction Microservice

### gbds.extraction.service

This parameter enables the extraction microservice. If this parameter is set to `false`, GBDS will use the built-in extraction service.

**Default Value:**

> `true`

### gbds.extraction.service.face.count

This parameter defines how many instances of the face extraction microservice will be available.

**Default Value:**

> `1`

### gbds.extraction.service.ginger.count

This parameter defines how many instances of the fingerprint, palm, newborn palm and sequence control extraction microservice will be available.

**Default Value:**

> `5`

### gbds.extraction.service.girl.count

This parameter defines how many instances of the iris extraction microservice will be available.

**Default Value:**

> `1`

### gbds.extraction.service.hostname

This parameter defines the hostname of the extraction microservice. If specified as `localhost`, the API will take control of starting/stopping the services. If another hostname is set, activation/deactivation must be done manually.

**Default Value:**

> `localhost`

### gbds.extraction.service.initialPort

This parameter defines the starting port number for the extraction microservices. Each microservice instance will increase its port by 1. This means the first enabled microservice instance will have a port with the defined number, the second number+1, the third number+2 and so on.

**Default Value:**

> `30000`

### gbds.extraction.service.logLevel

This parameter defines the log level of the extraction microservice. `INFO` will log the script outputs in the API log. `DEBUG` will log the script outputs and the extractor log directly into the API log.

**Default Value:**

> `INFO`

**Possible Values:**

> * `INFO`
> * `DEBUG`

### gbds.extraction.service.timeout

This parameter defines the timeout for the extraction microservice in seconds.

**Default Value:**

> `60`

### gbds.extraction.service.maxTries

This parameter defines the maximum number of extraction attempts that GBDS will perform in the same transaction before returning an error.

**Default Value:**

> `3`

### gbds.extraction.service.linkLibSegfault

This parameter enables tracing of segmentation failures in the extraction service.

**Default Value:**

> `false`

### gbds.extraction.service.checkTimeoutSecs

Timeout (in seconds) to check if the template extraction microservice was created.

**Default Value:**

> `10`

### api.uniqueId

This parameter defines the API ID and is **OPTIONAL**. It is used to manually start an extraction microservice and identify which microservice is bound to which API. The value can be any string value without whitespace or special characters.

## Quality Extraction Service

### gbds.extraction.quality.service

This parameter enables the quality extraction service.

**Default Value:**

> `true`

### gbds.extraction.quality.api.uniqueId

This parameter defines the API ID and is **OPTIONAL**. It is used to manually start the quality extraction service and identify which service is bound to which API. The value can be any string value without whitespace or special characters.

{% hint style="warning" %} If you are using multiple APIs, pay attention to the configuration [gbds.extraction.quality.api.uniqueId.list](#gbdsextractionqualityapiuniqueidlist) {% endhint %}

#### gbds.extraction.quality.api.uniqueId.list

This setting defines the IDs of the APIs that will process quality extraction in the background. There are two ways to define the ids:

* Separated by commas, with the leader first, all other ids are set as runners.
* Json

```json
[
    {
        "apiId":"<api_id>",
        "type":"LEADER|RUNNER"
    }
]
```

`api_id` is **ALWAYS** required and cannot be empty, while `type` is optional.

{% hint style="warning" %} Only one LEADER can be defined. {% endhint %}

This setting does not change any other behavior of the quality extraction service.

### gbds.extraction.quality.fillTransactionQualityPropertiesTable

This parameter defines whether the quality properties (NFIQ Value, number of minutiae, image size, etc.) extracted by the quality extraction service should be stored in the table `gbds.transaction_quality_properties`.

{% hint style="warning" %} Enabling this parameter can drastically increase the RDB space requirement {% endhint %}

**Default Value:**

> `false`

### gbds.extraction.quality.service.linkLibSegfault

This parameter enables tracing of segmentation failures in the quality extraction service.

**Default Value:**

> `false`

### gbds.extraction.quality.service.rows-on-select

This parameter determines the transaction block size to be sent to the thread pool for quality extraction.

**Default Value:**

> `20`

### gbds.extraction.quality.service.submitted-queue-factor

This parameter determines the factor to be multiplied by the thread pool size to determine the average processing queue size.

**Default Value:**

> `3`

### gbds.faces.extraction.quality.api

This parameter enables the face quality extraction service on enrollments and updates via the API call.

**Default Value:**

> `true`

### gbds.enroll.face.min.quality

Defines the minimum quality threshold for a face image to be accepted in an enroll operation.

**Default Value:**

> `50`

### gbds.update.face.min.quality

Defines the minimum quality threshold for a face image to be accepted in an update operation.

**Default Value:**

> `50`

### gbds.faces.extraction.quality.background

This parameter enables the face quality extraction service in the background. When enabled, the extractor will look at the table `gbds.transaction` where the rows `finger_quality_extracted` have the value `false`, and, from the transaction tguid, will fetch the template from HBase with the same tguid and perform quality extraction on that template.

{% hint style="info" %} Enabling this parameter **NOT** enables quality extraction via API call {% endhint %}

**Default Value:**

> `false`

### gbds.fingerprints.extraction.quality.api

This parameter enables the fingerprint quality extraction service on enrollments and updates via the API call.

**Default Value:**

> `true`

### gbds.fingerprints.extraction.quality.background

This parameter enables the fingerprint quality extraction service in the background. When enabled, the extractor will look at the table `gbds.transaction` where the rows `finger_quality_extracted` have the value `false`, and, from the transaction tguid, will fetch the template from HBase with the same tguid and perform quality extraction on that template.

{% hint style="info" %} Enabling this parameter **NOT** enables quality extraction via API call {% endhint %}

**Default Value:**

> `false`

### gbds.extraction.quality.service.finger.count

This parameter defines how many instances of fingerprint quality extraction services will be available.

**Default Value:**

> `1`

### gbds.extraction.quality.service.face.count

This parameter defines how many instances of face quality extraction services will be available.

**Default Value:**

> `1`

### gbds.extraction.quality.service.initialPort

This parameter defines the starting port number for the quality extraction service. Each service instance will increase its port by 1. This means the first enabled service instance will have a port with the defined number, the second number+1, the third number+2 and so on.

**Default Value:**

> `31000`

### gbds.extraction.quality.service.logLevel

This parameter defines the log level of the quality extraction service. `INFO` will log the script outputs in the API log. `DEBUG` will log the script outputs and the extractor log directly into the API log.

**Default Value:**

> `INFO`

**Possible Values:**

> * `INFO`
> * `DEBUG`

### gbds.extraction.quality.service.timeout

This parameter defines the timeout for the quality extraction service in seconds.

**Default Value:**

> `60`

### gbds.extraction.quality.service.hostname

This parameter defines the hostname of the quality extraction service. If specified as `localhost`, the API will take control of starting/stopping the services. If another hostname is set, activation/deactivation must be done manually.

**Default Value:**

> `localhost`

### gbds.extraction.quality.service.maxTries

This parameter defines the maximum number of extraction attempts that GBDS will perform in the same transaction before returning an error.

**Default Value:**

> `3`

### gbds.extraction.quality.service.checkTimeoutSecs

Timeout (in seconds) to check if the quality extraction microservice was created.

**Default Value:**

> `10`

## External Biographic Base

### gbds.biographicBase.enabled

Flag to turn on/off access to the Biobase server. When turned off, `biographicBaseStatus` is not returned in get/list transaction/person calls.

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

### gbds.biographicBase.endpoints

Comma separated list with all Biobase server URLs, with host and port.

**Default Value:**

> Empty

**Possible Values:**

`http://biobase-server-ip:8130,http://biobase-server-ip:8131`

### gbds.biographicBase.get.timeout.ms

Request timeout `get` from the Biobase server. It is used in API calls `get transaction` or `get person`.

**Default Value:**

> `500`

### gbds.biographicBase.list.timeout.ms

Request timeout `list` from the Biobase server. It is used in API calls `list transaction` or `list people`. In the `list`calls, the Biobase Server is called only once for all transactions/people that will be returned.

**Default Value:**

> `500`

### gbds.biographicBase.logLevel

Log level in calls to the Biobase server.

**Default Value:**

> `INFO`

**Possible Values:**

> * `INFO`: logs the server request URL.
> * `NONE`: no server request logging.
> * `TIME`: logs the server request URL and the elapsed time.
> * `DEBUG`: logs the server request URL, the elapsed time and the request/response bodies.

### gbds.biographicBase.clientID

Authentication client ID.

**Default Value:**

> Empty

### gbds.biographicBase.clientSecret

Authentication client secret.

**Default Value:**

> Empty

### gbds.biographicBase.lookAllServers

Flag to look through all servers in cases of unauthorized or people not found.

* For authorization:
  * When ON and a Biobase Server returns unauthorized, the API will try all other servers attempting to authenticate.
  * When OFF, the API will look only at the current Biobase Server for authentication, returning unauthorized or authorized.
* For people not found:
  * When ON and the Biobase Server call does not return all people, the API will try all other servers until all people are found. If the consolidated people list from all servers is still incomplete, even after going through all servers, it will be left as is.
  * When OFF, the API will look only to the current Biobase server for all people in the request. Even if a person is still not in the people list, the list is left as is.

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

### gbds.biographicBase.autoUpdate

Sends biographical data to BioBase when creating/updating/trusted.

**Default Value:**

> `true`

**Possible Values:**

> * `true`
> * `false`

### gbds.biographicBase.sendPguidAsKey

Sends PGUID as key in any update to BioBase.

**Default Value:**

> `true`

**Possible Values:**

> * `true`
> * `false`

### gbds.biographicBase.sendTguidAsKey

Sends TGUID as key in any update to BioBase.

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

## Template Serializer Configuration

This section describes the configuration parameters related to the template serializer. These configuration parameters are designed to allow the use of the *GBDS Batch Extractor*.

{% hint style="info" %} See the manual of *GBDS Batch Extractor* for additional information about its use. {% endhint %}

Whenever GBDS performs a *cold boot*, it will attempt to recover templates from a default column family. If the template does not exist in that column, GBDS will attempt to recover it from the fallback column family.

The serializer configuration parameters are:

### Default Column Family

These parameters are divided by biometric modalities. Templates in this column family are not encoded and the format used is *byteArray*.

```properties
gbds.hbase.templates.fingerprint.cf.name
gbds.hbase.templates.palmprint.cf.name
gbds.hbase.templates.face.cf.name
gbds.hbase.templates.iris.cf.name
gbds.hbase.templates.newborn-palmprint.cf.name
```

The default value for these parameters is `tpt`.

### Fallback Column Family

These parameters refer to the column families previously used to store biometric templates. They are separated by biometric modality.

```properties
gbds.hbase.templates.fallback.fingerprint.cf.name
gbds.hbase.templates.fallback.palmprint.cf.name
gbds.hbase.templates.fallback.face.cf.name
gbds.hbase.templates.fallback.iris.cf.name
gbds.hbase.templates.fallback.newborn-palmprint.cf.name
```

The default values represent the column families used before the change of these parameters, and are, respectively: `fingerprints`, `palmprints`, `faces`, and `iris`.

### Fallback encoding in *base64*

The fallback column family supports encoding. The following parameters define whether the column family is base64 encoded. *base64*:

```properties
gbds.hbase.templates.fallback.fingerprint.cf.is-base64-encoded
gbds.hbase.templates.fallback.palmprint.cf.is-base64-encoded
gbds.hbase.templates.fallback.face.cf.is-base64-encoded
gbds.hbase.templates.fallback.iris.cf.is-base64-encoded
gbds.hbase.templates.fallback.newborn-palmprint.cf.is-base64-encoded
```

The default value for these parameters is `true`.

## Email Notification Settings

### gbds.transparency.search.identify.send-email.enabled

This parameter enables the email notification service. When *true*, every face identification search will send an email with the requested image to specified users or groups.

**Default Value:**

> `false`

**Possible Values:**

> * `true`
> * `false`

### gbds.transparency.email-notifier.log-level

This parameter defines the log level of the email notification service.

**Default Value:**

> `INFO`

**Possible Values:**

> * `INFO`
> * `TIME`
> * `NONE`
> * `DEBUG`.

### gbds.transparency.email-notifier.timeout

This parameter defines the *timeout* in seconds of the email notification service.

**Default Value:**

> `60`

### gbds.transparency.email-notifier.url

This parameter defines the URL of the email notification service.

### gbds.transparency.search.identify.request.notify.enabled

This parameter allows the email notification service to send the notification for face identification search requests.

**Default Value:**

> `false`

### gbds.transparency.search.identify.result.actions.enabled

This parameter allows the email notification service to process the action defined for a person via the transparency tables when the person appears in the search results.

**Default Value:**

> `false`

### gbds.transparency.search.identify.result.notify.enabled

This parameter allows the email notification service to send messages when search results match persons of interest.

**Default Value:**

> `false`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/gbs/en/gbds-configuration/gbdsapiconf.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
