> ## 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.

# EPIC Indien: Wählerregistrierung (ECI) API

> Indien EPIC (Wählerregistrierung, ECI): autoritative Datenbankabfrage über Didit. Zahlung pro Aufruf ab $0.25, keine Verträge, keine Mindestabnahme.

Prüft Eingabedaten gegen die Datenbank der Election Commission of India. Didit stellt diesen Dienst über `POST /v3/database-validation/` bereit, damit Sie die übermittelten Daten mit der maßgeblichen Quelle abgleichen und normalisierte Abgleichsergebnisse erhalten.

## Abdeckung

* **Abdeckung:** > 75%
* **Land:** Indien
* **Service-ID:** `ind_epic_voter_s_registration`
* **Datenbereich:** Öffentliche Verwaltung
* **Kategorie:** ElectoralRoll

## Eingaben

| Feld | Pflicht | Beispiel |
| - | -: | - |
| `full_name` | Ja | `John Doe` |
| `date_of_birth` | Ja | `1990-01-01` |
| `epic_card` | Ja | `ABC1234567` |
| `vendor_data` | Nein | `user-1234` |

* **Pflichteingaben:** `full_name`, `date_of_birth`, `epic_card`
* **Optionale Eingaben:** `vendor_data`
* **Einwilligung:** erforderlich
* **Verfügbarkeit im Workflow:** verfügbar mit Feldzuordnung
* **Abdeckung:** > 75%
* **Preis:** \$0.25 pro erfolgreiche Abfrage

In einem Workflow wird `epic_card` nicht auf einem Ausweisdokument gedruckt, daher erzeugt kein Schritt diesen Wert von selbst. Erfassen Sie ihn über eine Fragebogen-Antwort, ein Document-AI-Extraktionsfeld oder einen Wert, den Sie beim Erstellen der Sitzung übergeben, und ordnen Sie ihn dem Schritt Datenbankvalidierung zu. Solange er nicht zugeordnet ist, zeigt der Workflow-Editor diesen Dienst als deaktiviert an und nennt die fehlende Eingabe. Zur Laufzeit führt eine fehlende Eingabe dazu, dass die Prüfung ohne vorherige Abfrage übersprungen wird. Ihnen wird also nie eine Datenbankabfrage berechnet, die gar nicht ausgeführt werden konnte.

Nicht jedes Dokument, das dieser Dienst akzeptiert, enthält die Kennung, über die abgefragt wird. Wenn die Kennung nicht aus dem Dokument extrahiert wird, wird die Prüfung als **nicht anwendbar** erfasst: Es wird keine Datenbank abgefragt und Ihnen wird nichts berechnet. In manchen Ländern betrifft das einen großen Anteil der realen Nutzer. Um auch diese Nutzer abzudecken, erfassen Sie die Kennung zusätzlich über eine Fragebogen-Antwort, ein Document-AI-Extraktionsfeld oder einen Wert, den Sie beim Erstellen der Sitzung übergeben, und ordnen Sie sie dem Schritt Datenbankvalidierung zu.

## Body-Parameter

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

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

Beispiel: `IND`

**services** `string` *required* (default: ind\_epic\_voter\_s\_registration)

Array mit der ID dieses Dienstes. Das Festlegen des Dienstes beschränkt die Anfrage auf genau diese Datenbank.

Beispiel: `ind_epic_voter_s_registration`

**consent** `boolean` *required* (default: true)

Ausdrückliche Einwilligung des Endbenutzers für diesen Dienst.

Beispiel: `true`

**full\_name** `string` *required* (default: John Doe)

Vollständiger amtlicher Name, der geprüft werden soll.

Beispiel: `John Doe`

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

Geburtsdatum im Format `YYYY-MM-DD`.

Beispiel: `1990-01-01`

**epic\_card** `string` *required* (default: ABC1234567)

EPIC-Nummer der Wählerkarte.

Beispiel: `ABC1234567`

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

Ihre stabile Benutzerreferenz für diese Person, zum Beispiel Ihre interne Benutzer-ID. Didit verwendet sie, um eigenständige Prüfungen demselben Endbenutzer zuzuordnen und das Rauschen bei der Duplikaterkennung zu verringern.

Beispiel: `user-1234`

## Eingaberegeln & Validierungshinweise

* `epic_card` muss dem Muster `[A-Za-z]{3}\d{7,14}` entsprechen.

## So rufen Sie den Dienst 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=IND" \
  -F "services=ind_epic_voter_s_registration" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "full_name=John Doe" \
  -F "date_of_birth=1990-01-01" \
  -F "epic_card=ABC1234567"
```

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

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="IND",
    services=["ind_epic_voter_s_registration"],
    consent=True,
    full_name="John Doe",
    date_of_birth="1990-01-01",
    epic_card="ABC1234567",
    vendor_data="user-1234",
)
print(result)
```

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

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

const result = await didit.databaseValidation.validate({
  issuing_state: "IND",
  services: ["ind_epic_voter_s_registration"],
  consent: true,
  full_name: "John Doe",
  date_of_birth: "1990-01-01",
  epic_card: "ABC1234567",
  vendor_data: "user-1234",
});
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: "IND",
	Services:     didit.Some([]string{"ind_epic_voter_s_registration"}),
	Consent:      didit.Bool(true),
	FullName:     didit.String("John Doe"),
	DateOfBirth:  didit.String("1990-01-01"),
	EpicCard:     didit.String("ABC1234567"),
	VendorData:   didit.String("user-1234"),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
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("IND")
        .services(List.of("ind_epic_voter_s_registration"))
        .consent(true)
        .fullName("John Doe")
        .dateOfBirth(LocalDate.parse("1990-01-01"))
        .epicCard("ABC1234567")
        .vendorData("user-1234")
        .build());
System.out.println(result);
```

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

require 'vendor/autoload.php';

use Didit\DiditClient;

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

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'IND',
    'services' => ['ind_epic_voter_s_registration'],
    'consent' => true,
    'full_name' => 'John Doe',
    'date_of_birth' => '1990-01-01',
    'epic_card' => 'ABC1234567',
    'vendor_data' => 'user-1234',
]);
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: "IND",
  services: ["ind_epic_voter_s_registration"],
  consent: true,
  full_name: "John Doe",
  date_of_birth: "1990-01-01",
  epic_card: "ABC1234567",
  vendor_data: "user-1234"
)
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 = "IND",
    Services = new string[] { "ind_epic_voter_s_registration" },
    Consent = true,
    FullName = "John Doe",
    DateOfBirth = "1990-01-01",
    EpicCard = "ABC1234567",
    VendorData = "user-1234",
});
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 zum Beispiel eine echte biometrische Abweichung (`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 für 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 alle geprüften Felder stimmen überein.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "IND",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "ind_epic_voter_s_registration",
      "service_name": "India EPIC (Voter's Registration) (ECI)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "full_name": "John Doe",
        "identification_number": "SAMPLE-ID-12345"
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: Die Identifikationsnummer wurde gefunden, aber ein oder mehrere persönliche Felder (meist Name oder Geburtsdatum) stimmen nicht vollständig überein.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "IND",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "ind_epic_voter_s_registration",
      "service_name": "India EPIC (Voter's Registration) (ECI)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "full_name": "John Doe",
        "identification_number": "SAMPLE-ID-12345"
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "no_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`NO_MATCH`**: Das Register hat für die übermittelten Daten keinen Treffer geliefert.

```json 200 OK — NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "IND",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "ind_epic_voter_s_registration",
      "service_name": "India EPIC (Voter's Registration) (ECI)",
      "source_data": {
        "date_of_birth": "NO_MATCH",
        "full_name": "NO_MATCH",
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "date_of_birth": "no_match",
        "full_name": "no_match",
        "identification_number": "no_match"
      }
    }
  ]
}
```

## Rückgabedaten

Welche Felder genau in `source_data` erscheinen, hängt davon ab, was das Register zurückgibt. Das generierte Beispiel für `ind_epic_voter_s_registration` dokumentiert derzeit diese normalisierte Struktur:

* `date_of_birth`
* `full_name`
* `identification_number`

## Preise & SLAs

Abfragen bei India EPIC (Voter's Registration) (ECI) werden nur berechnet, wenn Didit von der Validierungsquelle ein eindeutiges Ergebnis erhält.

* **Preis pro Abfrage:** \$0.25 USD.
* **Abrechnung:** pro erfolgreiche 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 \< 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 Datenbankvalidierung in Indien](https://docs.didit.me/api-reference/database-validation/india.md)
* [Übersicht zur Datenbankvalidierung](https://docs.didit.me/de/core-technology/database-validation/overview.md)
* [Ergebnis-Codes](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.