> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Bankverifizierungsnummer (BVN) Nigeria API

> Nigeria-BVN-Abfrage über Didit: maßgebliche Datenbankabfrage in Nigeria. Pay-per-call ab $0.35, ohne Verträge und Mindestabnahme.

Prüft Eingabedaten gegen die Datenbank der nigerianischen Bankenbranche. Ein Selfie ist erforderlich: Das beim BVN hinterlegte Registrierungsfoto wird per Gesichtsabgleich mit dem Selfie verglichen, und der Datensatz wird nur zurückgegeben, wenn es sich um dieselbe Person handelt. Didit stellt diesen Dienst über `POST /v3/database-validation/` bereit, damit Sie die übermittelten Daten gegen die maßgebliche Quelle prüfen und normalisierte Abgleichsergebnisse erhalten. Eingabeformat: `bvn` nimmt die nigerianische Bank Verification Number entgegen (genau 11 Ziffern).

## Abdeckung

* **Abdeckung:** \~ 100%
* **Land:** Nigeria
* **Service-ID:** `nga_bank_verification_number`
* **Datenbereich:** Finanzen
* **Kategorie:** Bankwesen

## Eingaben

| Feld | Pflicht | Beispiel |
| - | -: | - |
| `bvn` | Ja | `11111111111` |
| `selfie` | Ja | `@./selfie.jpg` |
| `first_name` | Nein | `John` |
| `last_name` | Nein | `Doe` |
| `date_of_birth` | Nein | `1990-01-01` |
| `vendor_data` | Nein | `user-1234` |

* **Pflichteingaben:** `bvn`, `selfie`
* **Optionale Eingaben:** `first_name`, `last_name`, `date_of_birth`, `vendor_data`
* **Einwilligung:** Nicht erforderlich
* **Verfügbarkeit im Workflow:** Im Workflow mit Feldzuordnung verfügbar
* **Abdeckung:** \~ 100%
* **Preis:** \$0.35 pro erfolgreicher Abfrage

In einem Workflow steht `bvn` nicht auf einem Ausweisdokument, daher wird es von keinem Schritt automatisch erzeugt. Erfassen Sie es aus einer Fragebogen-Antwort, einem Feld einer Document-AI-Extraktion oder einem Wert, den Sie beim Erstellen der Sitzung übergeben, und ordnen Sie es dem Schritt Datenbankvalidierung zu. Solange es nicht zugeordnet ist, zeigt der Workflow-Editor diesen Dienst als deaktiviert an und nennt die fehlende Eingabe. Fehlt sie zur Laufzeit, wird die Prüfung übersprungen, bevor eine Abfrage erfolgt. So wird Ihnen nie eine Datenbankabfrage berechnet, die nicht ausgeführt werden konnte.

## Body-Parameter

**issuing\_state** `string` *required* (default: NGA)

ISO-3166-1-Alpha-3-Ländercode für diesen Datenbankdienst.

Beispiel: `NGA`

**services** `string` *required* (default: nga\_bank\_verification\_number)

Array mit dieser Service-ID. Die Festlegung des Dienstes beschränkt die Anfrage auf genau diese Datenbank.

Beispiel: `nga_bank_verification_number`

**bvn** `string` *required* (default: 11111111111)

Bank Verification Number.

Beispiel: `11111111111`

**selfie** `file` *required*

Selfie-Bilddatei, die für die biometrische Datenbankvalidierung hochgeladen wird. Akzeptierte Formate: JPEG, PNG oder WebP.

Beispiel: `@./selfie.jpg`

**first\_name** `string`

Zu validierender Vorname.

Beispiel: `John`

**last\_name** `string`

Zu validierender Nachname.

Beispiel: `Doe`

**date\_of\_birth** `string` (default: 1990-01-01)

Geburtsdatum im Format `YYYY-MM-DD`.

Beispiel: `1990-01-01`

**vendor\_data** `string` (default: user-1234)

Ihre stabile Benutzerreferenz für diese Person, etwa Ihre interne Benutzer-ID. Didit verwendet sie, um eigenständige Prüfungen derselben Endbenutzerin bzw. desselben Endbenutzers zuzuordnen und die Zahl unnötiger Dublettenmeldungen zu verringern.

Beispiel: `user-1234`

## Eingaberegeln und Hinweise zur Validierung

* Nigerianische Bank Verification Number (genau 11 Ziffern)
* `bvn` darf nur Ziffern enthalten. Entfernen Sie Leerzeichen, Bindestriche und Satzzeichen, bevor Sie die Anfrage senden.
* `bvn` muss genau 11 Zeichen lang sein.

## So rufen Sie es auf

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=NGA" \
  -F "services=nga_bank_verification_number" \
  -F "vendor_data=user-1234" \
  -F "bvn=11111111111" \
  -F "selfie=@./selfie.jpg" \
  -F "date_of_birth=1990-01-01"
```

```python Python theme={null}
from didit import Didit

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="NGA",
    services=["nga_bank_verification_number"],
    date_of_birth="1990-01-01",
    bvn="11111111111",
    vendor_data="user-1234",
    selfie=open("selfie.jpg", "rb"),
)
print(result)
```

```javascript Node.js theme={null}
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

// Reads DIDIT_API_KEY.
const didit = new Didit();

const result = await didit.databaseValidation.validate({
  issuing_state: "NGA",
  services: ["nga_bank_verification_number"],
  date_of_birth: "1990-01-01",
  bvn: "11111111111",
  vendor_data: "user-1234",
  selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
```

```go Go theme={null}
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()

result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
	IssuingState: "NGA",
	Services:     didit.Some([]string{"nga_bank_verification_number"}),
	DateOfBirth:  didit.String("1990-01-01"),
	Bvn:          didit.String("11111111111"),
	VendorData:   didit.String("user-1234"),
	Selfie:       didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
import java.nio.file.Path;
import java.time.LocalDate;
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;

// Reads DIDIT_API_KEY.
Didit client = new Didit();

var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
        .issuingState("NGA")
        .services(List.of("nga_bank_verification_number"))
        .dateOfBirth(LocalDate.parse("1990-01-01"))
        .bvn("11111111111")
        .vendorData("user-1234")
        .selfie(Path.of("selfie.jpg"))
        .build());
System.out.println(result);
```

```php PHP theme={null}
<?php

require 'vendor/autoload.php';

use Didit\DiditClient;
use Didit\File;

// Reads DIDIT_API_KEY.
$didit = new DiditClient();

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'NGA',
    'services' => ['nga_bank_verification_number'],
    'date_of_birth' => '1990-01-01',
    'bvn' => '11111111111',
    'vendor_data' => 'user-1234',
    'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
```

```ruby Ruby theme={null}
require "didit"

# Reads DIDIT_API_KEY.
didit = Didit::Client.new

result = didit.database_validation.validate(
  issuing_state: "NGA",
  services: ["nga_bank_verification_number"],
  date_of_birth: "1990-01-01",
  bvn: "11111111111",
  vendor_data: "user-1234",
  selfie: Pathname("selfie.jpg")
)
puts result.to_h
```

```csharp .NET theme={null}
using System;
using System.Text.Json;
using Didit;

// Reads DIDIT_API_KEY.
using var client = new DiditClient();

var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
    IssuingState = "NGA",
    Services = new string[] { "nga_bank_verification_number" },
    DateOfBirth = "1990-01-01",
    Bvn = "11111111111",
    VendorData = "user-1234",
    Selfie = FileUpload.FromPath("selfie.jpg"),
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

Jeder erfolgreiche Aufruf gibt HTTP `200` zurück. Das Feld **`outcome_code`** zeigt, was tatsächlich passiert ist. So lässt sich etwa ein echter biometrischer Nichtabgleich (`BIOMETRIC_NO_MATCH`) von einem Selfie unterscheiden, das nicht gelesen werden konnte (`BIOMETRIC_IMAGE_UNUSABLE`). Der angezeigte `status` ist der Standardstatus der Funktion; Ihre konfigurierten [Aktionen bei Partial Match / No Match](https://docs.didit.me/de/core-technology/database-validation/database-validation-warnings.md) können ihn überschreiben.

**`MATCH`**: Das Register hat die Identität bestätigt, und jedes geprüfte Feld stimmt überein.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "NGA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "nga_bank_verification_number",
      "service_name": "Nigeria Bank Verification Number (BVN)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "last_name": "Doe"
      },
      "validation": {
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: Die BVN ist im Register erfasst und das Selfie stimmt mit dem NIBSS-Registrierungsfoto überein, aber ein Name oder Geburtsdatum, das Sie übermittelt haben, weicht vom Registereintrag ab. Der Datensatz wird zurückgegeben, damit Sie sehen können, welches Feld abweicht.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "nga_bank_verification_number",
      "service_name": "Nigeria Bank Verification Number (BVN)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "last_name": "Doe"
      },
      "validation": {
        "date_of_birth": "no_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`BIOMETRIC_NO_MATCH`**: Der Übereinstimmungswert lag unter dem Akzeptanzschwellenwert. Das Selfie zeigt nicht dieselbe Person wie das Registerfoto.

```json 200 OK — BIOMETRIC_NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "nga_bank_verification_number",
      "service_name": "Nigeria Bank Verification Number (BVN)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`INCONCLUSIVE`**: Das Register konnte nicht feststellen, ob die Person mit einem Registereintrag übereinstimmt. Das Ergebnis ist tatsächlich unsicher, denn die Person kann im Register enthalten sein oder nicht. Dies ist weder ein Nichtabgleich noch ein technisches Bildproblem. Es wird kein Feld bestätigt, daher ist match\_type null, und die Prüfung wird zur Überprüfung weitergeleitet.

```json 200 OK — INCONCLUSIVE theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": null,
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "nga_bank_verification_number",
      "service_name": "Nigeria Bank Verification Number (BVN)",
      "source_data": {},
      "validation": {}
    }
  ]
}
```

**`DOCUMENT_NOT_FOUND`**: Die übermittelte Dokumentnummer entspricht keinem Datensatz im Register.

```json 200 OK — DOCUMENT_NOT_FOUND theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "DOCUMENT_NOT_FOUND",
      "service_id": "nga_bank_verification_number",
      "service_name": "Nigeria Bank Verification Number (BVN)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

## Rückgabedaten

Die genauen Felder, die in `source_data` ausgegeben werden, hängen davon ab, was das Register zurückgibt. Das generierte Beispiel für `nga_bank_verification_number` dokumentiert derzeit diese normalisierte Struktur:

* `date_of_birth`
* `first_name`
* `last_name`

## Preise und SLAs

Abfragen der nigerianischen Bank Verification Number (BVN) werden nur berechnet, wenn Didit von der Validierungsquelle ein eindeutiges Ergebnis erhält.

* **Preis pro Aufruf:** \$0.35 USD.
* **Abrechnung:** pro erfolgreicher Abfrage. Ihnen wird nichts berechnet, wenn das Register nicht erreichbar ist, wenn Pflichtfelder fehlen oder wenn die Anfrage abgelehnt wird, bevor sie die Quelle erreicht.
* **Latenz:** typischer p95-Wert unter 2 s.
* **Verfügbarkeit:** 99.9% pro Quartal auf Seiten von Didit. Die Verfügbarkeit der nachgelagerten Quelle variiert je nach Land und Datensatz.

## Weiterlesen

* [Übersicht zur Nigeria-Datenbankvalidierung](https://docs.didit.me/api-reference/database-validation/nigeria.md)
* [Übersicht zur Datenbankvalidierung](https://docs.didit.me/de/core-technology/database-validation/overview.md)
* [Ergebniscodes](https://docs.didit.me/de/core-technology/database-validation/database-validation-outcome-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.