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

# दक्षिण अफ़्रीका बैंक खाता सत्यापन API

> दक्षिण अफ़्रीका बैंक खाता धारक सत्यापन: Didit के ज़रिए आधिकारिक डेटाबेस जाँच। प्रति कॉल $0.40 से, कोई अनुबंध या न्यूनतम नहीं।

यह इंटर-बैंक खाता धारक सत्यापन सेवा के माध्यम से पुष्ट करता है कि दक्षिण अफ़्रीका का एक बैंक खाता नामित धारक का है। Didit इस सेवा को `POST /v3/database-validation/` के जरिए उपलब्ध कराता है, ताकि आप सबमिट किए गए डेटा की प्रामाणिक स्रोत से तुलना कर सकें और सामान्यीकृत मिलान परिणाम प्राप्त कर सकें।

## कवरेज

* **कवरेज:** —
* **देश:** दक्षिण अफ़्रीका
* **सेवा ID:** `zaf_bank_account_holder`
* **डेटा डोमेन:** वित्तीय
* **श्रेणी:** बैंकिंग

## इनपुट

| फ़ील्ड | आवश्यक | उदाहरण |
| - | -: | - |
| `national_id` | हाँ | `8708150847085` |
| `bank_account_number` | हाँ | `1234567890` |
| `bank_name` | हाँ | `ABSA` |
| `account_type` | नहीं | `current` |
| `first_name` | नहीं | `John` |
| `last_name` | नहीं | `Doe` |
| `initials` | नहीं | `JD` |
| `email` | नहीं | `john.doe@example.com` |
| `phone_number` | नहीं | `+15550101000` |
| `vendor_data` | नहीं | `user-1234` |

* **आवश्यक इनपुट:** `national_id`, `bank_account_number`, `bank_name`
* **वैकल्पिक इनपुट:** `account_type`, `first_name`, `last_name`, `initials`, `email`, `phone_number`, `vendor_data`
* **सहमति:** आवश्यक
* **वर्कफ़्लो में उपलब्धता:** वर्कफ़्लो में फ़ील्ड मैपिंग के साथ उपलब्ध
* **कवरेज:** —
* **कीमत:** प्रति सफल क्वेरी \$0.40

वर्कफ़्लो में, `bank_account_number` और `bank_name` किसी पहचान दस्तावेज़ पर छपे नहीं होते, इसलिए कोई चरण इन्हें अपने आप उत्पन्न नहीं करता। इन्हें किसी प्रश्नावली के उत्तर, Document AI निष्कर्षण फ़ील्ड, या सत्र बनाते समय आपके भेजे गए मान से एकत्र करें, और हर एक को डेटाबेस सत्यापन चरण पर मैप करें। मैप होने तक वर्कफ़्लो एडिटर इस सेवा को अक्षम दिखाता है और गायब इनपुट का नाम बताता है। रन के समय गायब इनपुट का अर्थ है कि जाँच किसी भी क्वेरी से पहले छोड़ दी जाती है, इसलिए जिस डेटाबेस से पूछा ही नहीं जा सका, उसके लिए आपसे कभी शुल्क नहीं लिया जाता।

## बॉडी पैरामीटर

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

इस डेटाबेस सेवा के लिए ISO 3166-1 alpha-3 देश कोड।

उदाहरण: `ZAF`

**services** `string` *required* (default: zaf\_bank\_account\_holder)

इस सेवा ID वाला ऐरे। सेवा को पिन करने से अनुरोध इसी सटीक डेटाबेस तक सीमित रहता है।

उदाहरण: `zaf_bank_account_holder`

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

इस सेवा के लिए अंतिम उपयोगकर्ता की स्पष्ट सहमति।

उदाहरण: `true`

**national\_id** `string` *required* (default: 8708150847085)

इस सेवा के लिए राष्ट्रीय पहचान संख्या।

उदाहरण: `8708150847085`

**bank\_account\_number** `string` *required* (default: 1234567890)

इस डेटाबेस सेवा के लिए आवश्यक `bank_account_number` मान।

उदाहरण: `1234567890`

**bank\_name** `string` *required* (default: ABSA)

इस डेटाबेस सेवा के लिए आवश्यक `bank_name` मान।

उदाहरण: `ABSA`

**account\_type** `string` (default: current)

इस डेटाबेस सेवा के लिए आवश्यक `account_type` मान।

उदाहरण: `current`

**first\_name** `string`

सत्यापित किया जाने वाला पहला नाम।

उदाहरण: `John`

**last\_name** `string` (default: Doe)

सत्यापित किया जाने वाला उपनाम।

उदाहरण: `Doe`

**initials** `string` (default: JD)

इस डेटाबेस सेवा के लिए आवश्यक `initials` मान।

उदाहरण: `JD`

**email** `string`

ईमेल पता।

उदाहरण: `john.doe@example.com`

**phone\_number** `string`

इस डेटाबेस सेवा के लिए आवश्यक `phone_number` मान।

उदाहरण: `+15550101000`

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

इस व्यक्ति के लिए आपका स्थायी उपयोगकर्ता संदर्भ, जैसे आपका आंतरिक उपयोगकर्ता ID। Didit इसका उपयोग स्टैंडअलोन जाँचों को उसी अंतिम उपयोगकर्ता से जोड़ने और डुप्लिकेट-पहचान से जुड़े अनावश्यक संकेत कम करने के लिए करता है।

उदाहरण: `user-1234`

## इनपुट नियम और सत्यापन नोट्स

* `account_type` दक्षिण अफ़्रीकी AVS खाता प्रकारों में से एक होना चाहिए: `current`, `savings`, `transmission`, `subscriptionShare`, `notKnown`। मिलान केस-इनसेंसिटिव है। अगर आपको खाता प्रकार पता नहीं है तो यह फ़ील्ड छोड़ दें। तब Didit `notKnown` भेजता है और खाता-प्रकार की जाँच को अनुरोध विफल करने के बजाय "पुष्ट नहीं" के रूप में दर्ज करता है।

## इसे कैसे कॉल करें

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=ZAF" \
  -F "services=zaf_bank_account_holder" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "national_id=8708150847085" \
  -F "bank_account_number=1234567890" \
  -F "bank_name=ABSA" \
  -F "account_type=current" \
  -F "last_name=Doe" \
  -F "initials=JD"
```

हर सफल कॉल HTTP `200` लौटाती है। **`outcome_code`** फ़ील्ड बताता है कि वास्तव में क्या हुआ, उदाहरण के लिए असली बायोमेट्रिक मिलान न होना (`BIOMETRIC_NO_MATCH`) और ऐसी सेल्फ़ी जिसे पढ़ा नहीं जा सका (`BIOMETRIC_IMAGE_UNUSABLE`) में अंतर। दिखाया गया `status` डिफ़ॉल्ट सुविधा स्थिति है; आपकी कॉन्फ़िगर की गई [Partial Match / No Match कार्रवाइयाँ](https://docs.didit.me/hi/core-technology/database-validation/database-validation-warnings.md) इसे बदल सकती हैं।

**`MATCH`**: रजिस्ट्री ने पहचान की पुष्टि की और जाँची गई हर फ़ील्ड मेल खाई।

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "ZAF",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "zaf_bank_account_holder",
      "service_name": "South Africa - Bank Account Holder Verification",
      "source_data": {
        "accepts_credits": true,
        "accepts_debits": true,
        "account_found": true,
        "account_number_length_valid": true,
        "account_open": true,
        "account_type_match": true,
        "id_match": true,
        "identification_number": "SAMPLE-ID-12345",
        "initials_match": true,
        "surname_match": true
      },
      "validation": {
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: पहचान संख्या मिल गई, लेकिन एक या अधिक व्यक्तिगत फ़ील्ड (आमतौर पर नाम या जन्म तिथि) पूरी तरह मेल नहीं खाए।

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "ZAF",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "zaf_bank_account_holder",
      "service_name": "South Africa - Bank Account Holder Verification",
      "source_data": {
        "accepts_credits": true,
        "accepts_debits": true,
        "account_found": true,
        "account_number_length_valid": false,
        "account_open": true,
        "account_type_match": true,
        "id_match": true,
        "identification_number": "SAMPLE-ID-12345",
        "initials_match": true,
        "surname_match": false
      },
      "validation": {
        "full_name": "partial_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`NO_MATCH`**: सबमिट किए गए डेटा के लिए रजिस्ट्री से कोई मिलान नहीं मिला।

```json 200 OK — NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "ZAF",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "zaf_bank_account_holder",
      "service_name": "South Africa - Bank Account Holder Verification",
      "source_data": {
        "accepts_credits": false,
        "accepts_debits": false,
        "account_found": false,
        "account_number_length_valid": false,
        "account_open": false,
        "account_type_match": false,
        "id_match": false,
        "identification_number": "NO_MATCH",
        "initials_match": false,
        "surname_match": false
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

## लौटाया गया डेटा

`source_data` में ठीक-ठीक कौन-से फ़ील्ड आते हैं, यह इस पर निर्भर है कि रजिस्ट्री क्या लौटाती है। `zaf_bank_account_holder` के लिए जनरेट किया गया उदाहरण अभी इस सामान्यीकृत संरचना का दस्तावेज़ीकरण करता है:

* `accepts_credits`
* `accepts_debits`
* `account_found`
* `account_number_length_valid`
* `account_open`
* `account_type_match`
* `id_match`
* `identification_number`
* `initials_match`
* `surname_match`

## मूल्य निर्धारण और SLA

दक्षिण अफ़्रीका: Bank Account Holder Verification क्वेरी तभी बिल की जाती हैं जब Didit को सत्यापन स्रोत से निर्णायक परिणाम मिलता है।

* **प्रति कॉल मूल्य:** \$0.40 USD।
* **बिलिंग:** प्रति सफल क्वेरी। जब रजिस्ट्री पहुँच से बाहर हो, आवश्यक फ़ील्ड गायब हों, या अनुरोध स्रोत तक पहुँचने से पहले ही अस्वीकार हो जाए, तब आपसे शुल्क नहीं लिया जाता।
* **विलंबता:** सामान्यतः p95 2 s से कम।
* **उपलब्धता:** Didit की ओर से प्रति तिमाही 99.9%। डाउनस्ट्रीम स्रोत की उपलब्धता देश और डेटासेट के अनुसार अलग होती है।

## MATCH क्या पुष्टि करता है

Account Holder Verification (AVS) हाँ/नहीं की जाँचों का एक समूह है, रिकॉर्ड की खोज नहीं। स्रोत कभी नाम, ID नंबर या खाते का बैलेंस नहीं लौटाता। वह आपके भेजे विवरण लेता है, उन्हें उस खाते के लिए बैंक के पास मौजूद जानकारी से मिलाता है, और हर तुलना का उत्तर एक फ़्लैग के रूप में देता है। `source_data` में वही फ़्लैग होते हैं:

* **`account_found`**: बैंक के पास इस नंबर का खाता है। यह `false` हो तो बाकी सब अर्थहीन है।
* **`account_open`**: खाता खुला है। खाता मिल सकता है और फिर भी बंद हो सकता है।
* **`id_match`**: खाता उसी राष्ट्रीय ID के नाम पर है जो आपने भेजी। यही वह जाँच है जिसके लिए यह सेवा बनी है।
* **`initials_match`**, **`surname_match`**: आपके भेजे `initials` और `last_name` बैंक के रिकॉर्ड में दर्ज खाताधारक से मेल खाते हैं।
* **`account_type_match`**: आपका भेजा `account_type` खाते के वास्तविक प्रकार से मेल खाता है।
* **`email_match`**, **`phone_match`**: आपके भेजे `email` और `phone_number` बैंक के पास मौजूद संपर्क विवरणों से मेल खाते हैं।
* **`accepts_debits`**, **`accepts_credits`**: खाता डेबिट ऑर्डर और क्रेडिट प्राप्त कर सकता है।
* **`account_number_length_valid`**: खाता नंबर उतनी लंबाई का है जितनी बैंक अपेक्षित करता है।

परिणाम कोड इन्हें सारांशित करता है:

* **`MATCH`**: खाता मौजूद है और आपके भेजे हर फ़ील्ड का मिलान हुआ, `id_match` सहित।
* **`PARTIAL_MATCH`**: खाता आपके द्वारा भेजी गई राष्ट्रीय ID के धारक के नाम पर है, लेकिन आपके भेजे कम से कम एक और फ़ील्ड का मिलान नहीं हुआ (उदाहरण के लिए, बैंक के रिकॉर्ड में अलग वर्तनी वाला उपनाम)। `outcome_detail` उन फ़ील्ड के नाम बताता है जो मेल नहीं खाए।
* **`NO_MATCH`**: या तो बैंक के पास ऐसा कोई खाता नहीं है, या खाता है पर किसी और का है। दोनों ही व्यक्ति के बारे में निर्णायक उत्तर हैं।

जो जाँच आपने माँगी नहीं, वह न गिनी जाती है और न रिपोर्ट की जाती है। AVS हर उस फ़ील्ड के लिए `N` उत्तर देता है जो भेजा नहीं गया। इसलिए `surname_match`, `initials_match`, `email_match`, `phone_match` और `account_type_match` `source_data` में केवल तभी आते हैं जब आपने संबंधित इनपुट भेजा हो। इसका अर्थ है कि केवल `national_id`, `bank_account_number` और `bank_name` भेजने पर भी पूरा `MATCH` ही मिलता है।

## स्वीकृत bank\_name और account\_type मान

`bank_name` और `account_type` पूर्वनिर्धारित विकल्पों वाले मान हैं। इनमें से किसी भी सूची से बाहर का मान क्वेरी चलने से पहले अस्वीकार कर दिया जाता है, इसलिए टाइपो की कीमत एक राउंड-ट्रिप होती है, शुल्क नहीं।

`account_type` वैकल्पिक है और केस-इन्सेंसिटिव रूप में ये मान स्वीकार करता है:

`current` · `savings` · `transmission` · `subscriptionShare` · `notKnown`

जब आपको खाते का प्रकार पता न हो, तो इसे छोड़ दें। तब Didit `notKnown` भेजता है, अनुरोध सफल होता है, और `account_type_match` `false` लौटता है, क्योंकि तुलना के लिए कुछ था ही नहीं। कोई और मान, जैसे `checking`, `cheque` या `bond`, `400` के साथ अस्वीकार होता है, और उस उत्तर में स्वीकृत मानों की सूची होती है।

`bank_name` आवश्यक है, और इन मानों के स्वीकृत होने की पुष्टि की गई है (केस-इन्सेंसिटिव):

`ABSA` · `Capitec` · `FNB` · `Nedbank` · `Standard Bank` · `Investec` · `African Bank` · `Discovery Bank` · `Old Mutual` · `Bank Zero` · `Tyme` · `Grindrod`

इन सभी बैंकों के उपभोक्ता खाते दायरे में हैं, Capitec भी। संक्षिप्त रूप ठीक सूची के अनुसार भेजें: `Capitec`, `Capitec Bank` नहीं; `Tyme`, `TymeBank` नहीं। अज्ञात बैंक के लिए `REGISTRY_ERROR` परिणाम लौटता है, और उसका `outcome_detail` उस फ़ील्ड का नाम बताता है जिसे स्रोत ने अस्वीकार किया।

## गायब खाते और अनुपलब्ध स्रोत में अंतर

ये अलग-अलग HTTP परिणाम हैं, इसलिए त्रुटि स्ट्रिंग को पार्स करने की ज़रूरत नहीं:

* **खाता मौजूद नहीं है**: `200 OK`, `match_type: "no_match"`, `outcome_code: "NO_MATCH"`, `source_data.account_found: false`। यह बैंक का वास्तविक उत्तर है। बिल होता है, और आपकी नो-मैच कार्रवाई लागू होती है।
* **स्रोत ने उत्तर नहीं दिया**: `502 Bad Gateway`, जिसमें `validation_errors[].code` = `empty_provider_response` और `retryable: true` है। व्यक्ति के बारे में कुछ भी स्थापित नहीं हुआ, कोई शुल्क नहीं लगता, और अनुरोध दोबारा भेजना सुरक्षित है।
* **स्रोत ने क्वेरी चलाने से इनकार किया**: `400 Bad Request`, जिसमें `validation_errors[].code` = `provider_rejected_input` और `retryable: false` है। स्रोत ने खोज ही नहीं की, क्योंकि उसने भेजी गई जानकारी को स्वीकार करने से मना कर दिया। डेटा सुधारें; वही मान फिर भेजने से सफलता नहीं मिलेगी। कोई शुल्क नहीं।
* **स्रोत ने उत्तर दिया और आपके इनपुट को अस्वीकार किया**: `502 Bad Gateway`, जिसमें `validation_errors[].code` = `provider_invalid_input` है (उदाहरण के लिए, ऐसा खाता नंबर जो बैंक की अपनी फ़ॉर्मैट जाँच में विफल हो)। इनपुट सुधरने तक दोबारा भेजने का कोई अर्थ नहीं है; कोई शुल्क नहीं।
* **आपका अनुरोध Didit से बाहर नहीं गया**: `400 Bad Request`, जिसमें सुधारने योग्य फ़ील्ड सूचीबद्ध होते हैं। कोई शुल्क नहीं।

इनमें से केवल पहला व्यक्ति के बारे में उत्तर है। `502` को अस्थायी मानें। AVS किसी रजिस्ट्री को पढ़ने के बजाय खाताधारक के बैंक तक अनुरोध पहुँचाता है, इसलिए यह दक्षिण अफ़्रीकी सेवाओं में सबसे धीमी है। बैकऑफ़ के साथ पुनः प्रयास करें।

## आगे पढ़ें

* [दक्षिण अफ़्रीका डेटाबेस सत्यापन अवलोकन](https://docs.didit.me/api-reference/database-validation/south-africa.md)
* [डेटाबेस सत्यापन अवलोकन](https://docs.didit.me/hi/core-technology/database-validation/overview.md)
* [परिणाम कोड](https://docs.didit.me/hi/core-technology/database-validation/database-validation-outcome-codes.md)


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