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"
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
🇿🇦 Afrika Selatan
Verifikasi Pemegang Rekening Bank Afrika Selatan API
Validasi pemegang rekening bank Afrika Selatan lewat database resmi via Didit. Mulai dari $0.40 per panggilan, tanpa kontrak, tanpa minimum.
POST
/
v3
/
database-validation
/
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"
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
Mengonfirmasi bahwa rekening bank Afrika Selatan milik pemegang rekening yang disebutkan, melalui layanan Account Holder Verification antarbank. Didit menyediakan layanan ini melalui
POST /v3/database-validation/ agar Anda dapat memvalidasi data yang dikirim terhadap sumber resmi dan menerima hasil kecocokan yang sudah dinormalisasi.
Cakupan
- Cakupan: —
- Negara: Afrika Selatan
- ID layanan:
zaf_bank_account_holder - Domain data: Keuangan
- Kategori: Perbankan
Input
| Kolom | Wajib | Contoh |
|---|---|---|
national_id | Ya | 8708150847085 |
bank_account_number | Ya | 1234567890 |
bank_name | Ya | ABSA |
account_type | Tidak | current |
first_name | Tidak | John |
last_name | Tidak | Doe |
initials | Tidak | JD |
email | Tidak | john.doe@example.com |
phone_number | Tidak | +15550101000 |
vendor_data | Tidak | user-1234 |
- Input wajib:
national_id,bank_account_number,bank_name - Input opsional:
account_type,first_name,last_name,initials,email,phone_number,vendor_data - Persetujuan: Wajib
- Ketersediaan di alur kerja: Tersedia di alur kerja dengan pemetaan kolom
- Cakupan: —
- Harga: $0.40 per kueri yang berhasil
bank_account_number dan bank_name tidak tercetak pada dokumen identitas, sehingga tidak ada langkah yang menghasilkannya sendiri. Kumpulkan keduanya dari jawaban Kuesioner, dari kolom hasil ekstraksi Document AI, atau dari nilai yang Anda kirim saat membuat sesi, lalu petakan masing-masing pada langkah Validasi Database. Sampai keduanya dipetakan, editor alur kerja menampilkan layanan ini dalam keadaan nonaktif dan menyebutkan input yang belum ada. Saat dijalankan, input yang hilang berarti pemeriksaan dilewati sebelum ada kueri apa pun, sehingga Anda tidak pernah ditagih untuk database yang tidak dapat dikueri.
Parameter body
string
default:"ZAF"
wajib
Kode negara ISO 3166-1 alpha-3 untuk layanan database ini.Contoh:
ZAFstring
default:"zaf_bank_account_holder"
wajib
Array yang berisi ID layanan ini. Mengunci layanan membuat permintaan tetap terbatas pada database yang tepat ini.Contoh:
zaf_bank_account_holderboolean
default:"true"
wajib
Persetujuan eksplisit dari pengguna akhir untuk layanan ini.Contoh:
truestring
default:"8708150847085"
wajib
Nomor identitas nasional untuk layanan ini.Contoh:
8708150847085string
default:"1234567890"
wajib
Nilai
bank_account_number yang diwajibkan oleh layanan database ini.Contoh: 1234567890string
default:"ABSA"
wajib
Nilai
bank_name yang diwajibkan oleh layanan database ini.Contoh: ABSAstring
default:"current"
Nilai
account_type yang diwajibkan oleh layanan database ini.Contoh: currentstring
Nama depan yang akan divalidasi.Contoh:
Johnstring
default:"Doe"
Nama belakang yang akan divalidasi.Contoh:
Doestring
default:"JD"
Nilai
initials yang diwajibkan oleh layanan database ini.Contoh: JDstring
Alamat email.Contoh:
john.doe@example.comstring
Nilai
phone_number yang diwajibkan oleh layanan database ini.Contoh: +15550101000string
default:"user-1234"
Referensi pengguna stabil Anda untuk orang ini, misalnya ID pengguna internal Anda. Didit menggunakannya untuk menautkan pemeriksaan yang berdiri sendiri ke pengguna akhir yang sama dan mengurangi gangguan pada deteksi duplikat.Contoh:
user-1234Aturan input & catatan validasi
account_typeharus salah satu tipe akun AVS Afrika Selatan:current,savings,transmission,subscriptionShare,notKnown. Pencocokan tidak sensitif terhadap huruf besar-kecil. Hilangkan kolom ini jika Anda tidak mengetahui tipe akunnya: Didit kemudian mengirimnotKnown, dan pemeriksaan silang tipe akun dilaporkan sebagai tidak terkonfirmasi, bukan membuat permintaan gagal.
Cara memanggil
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"
Setiap panggilan yang berhasil mengembalikan HTTP 200. Kolom outcome_code memberi tahu Anda apa yang sebenarnya terjadi, misalnya membedakan ketidakcocokan biometrik nyata (BIOMETRIC_NO_MATCH) dari swafoto yang tidak dapat dibaca (BIOMETRIC_IMAGE_UNUSABLE). status yang ditampilkan adalah status fitur default. Tindakan Kecocokan Sebagian / Tidak Ada Kecocokan yang Anda konfigurasi dapat menggantinya.MATCH: Registri mengonfirmasi identitas dan setiap kolom yang diperiksa cocok.{
"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: Nomor identifikasi ditemukan, tetapi satu atau lebih kolom pribadi (biasanya nama atau tanggal lahir) tidak sepenuhnya cocok.{
"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: Registri tidak mengembalikan kecocokan untuk data yang dikirim.{
"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"
}
}
]
}
Data yang dikembalikan
Kolom pasti yang muncul disource_data bergantung pada apa yang dikembalikan registri. Contoh yang dihasilkan untuk zaf_bank_account_holder saat ini mendokumentasikan bentuk ternormalisasi berikut:
accepts_creditsaccepts_debitsaccount_foundaccount_number_length_validaccount_openaccount_type_matchid_matchidentification_numberinitials_matchsurname_match
Harga & SLA
Kueri Verifikasi Pemegang Rekening Bank di Afrika Selatan hanya ditagih ketika Didit menerima hasil konklusif dari sumber validasi.- Harga per panggilan: $0.40 USD.
- Penagihan: per kueri yang berhasil. Anda tidak dikenai biaya ketika registri tidak dapat dijangkau, ketika kolom wajib tidak ada, atau ketika permintaan ditolak sebelum mencapai sumber.
- Latensi: p95 tipikal < 2 detik.
- Ketersediaan: 99.9% per kuartal di sisi Didit; ketersediaan sumber hilir bervariasi menurut negara dan dataset.
Apa yang Dikonfirmasi oleh MATCH
Verifikasi Pemegang Rekening (AVS) adalah serangkaian pemeriksaan silang ya/tidak, bukan pencarian catatan. Sumber tidak pernah mengembalikan nama, nomor ID, atau saldo rekening. Sumber mengambil detail yang Anda kirim, membandingkannya dengan data yang dimiliki bank untuk rekening tersebut, lalu menjawab setiap perbandingan dengan sebuah flag.source_data memuat penanda tersebut:
account_found- bank memiliki rekening dengan nomor ini. Semua yang lain tidak berarti ketika nilai inifalse.account_open- rekening masih terbuka. Sebuah rekening bisa ditemukan tetapi sudah ditutup.id_match- rekening dimiliki oleh ID nasional yang Anda kirim. Inilah pemeriksaan yang menjadi alasan layanan ini ada.initials_match,surname_match-initialsdanlast_nameyang Anda kirim cocok dengan pemegang rekening dalam catatan.account_type_match-account_typeyang Anda kirim cocok dengan jenis rekening yang sebenarnya.email_match,phone_match-emaildanphone_numberyang Anda kirim cocok dengan detail kontak yang dimiliki bank.accepts_debits,accepts_credits- rekening dapat menerima instruksi debit dan kredit.account_number_length_valid- nomor rekening memiliki panjang yang diharapkan bank.
MATCH- rekening ada dan setiap kolom yang Anda kirim cocok, termasukid_match.PARTIAL_MATCH- rekening dimiliki oleh ID nasional yang Anda kirim, tetapi setidaknya satu kolom lain yang Anda kirim tidak cocok (misalnya nama keluarga yang ejaannya berbeda dalam catatan bank).outcome_detailmenyebutkan kolom yang gagal.NO_MATCH- bank tidak memiliki rekening tersebut, atau rekening ada tetapi milik orang lain. Keduanya adalah jawaban konklusif tentang orang tersebut.
N untuk setiap kolom yang tidak diberikan, sehingga surname_match, initials_match, email_match, phone_match dan account_type_match hanya muncul di source_data ketika Anda mengirim input yang sesuai. Karena itu, hanya mengirim national_id, bank_account_number dan bank_name tetap menghasilkan MATCH penuh.
Nilai bank_name dan account_type yang diterima
bank_name dan account_type adalah enumerasi. Nilai di luar salah satu daftar ditolak sebelum kueri dijalankan, sehingga salah ketik hanya memerlukan satu putaran komunikasi, bukan biaya.
account_type bersifat opsional dan menerima nilai berikut, tanpa membedakan huruf besar dan kecil:
current · savings · transmission · subscriptionShare · notKnown
Hilangkan kolom ini jika Anda tidak mengetahui jenis rekening. Didit kemudian mengirim notKnown, permintaan berhasil, dan account_type_match bernilai false karena tidak ada yang bisa dibandingkan. Nilai lain - checking, cheque, bond - ditolak dengan 400 yang mencantumkan kumpulan nilai yang diterima.
bank_name wajib diisi, dan nilai-nilai berikut telah dikonfirmasi diterima (tanpa membedakan huruf besar dan kecil):
ABSA · Capitec · FNB · Nedbank · Standard Bank · Investec · African Bank · Discovery Bank · Old Mutual · Bank Zero · Tyme · Grindrod
Rekening konsumen di semua bank ini termasuk dalam cakupan, termasuk Capitec. Kirim bentuk singkat persis seperti yang tercantum - Capitec, bukan Capitec Bank; Tyme, bukan TymeBank. Bank yang tidak dikenali menghasilkan REGISTRY_ERROR dengan outcome_detail yang menyebutkan kolom yang ditolak sumber.
Membedakan rekening yang tidak ada dari sumber yang tidak tersedia
Ini adalah hasil HTTP yang berbeda, sehingga tidak diperlukan penguraian string error:- Rekening tidak ada -
200 OK,match_type: "no_match",outcome_code: "NO_MATCH",source_data.account_found: false. Ini adalah jawaban nyata dari bank. Ditagih, dan tindakan Anda untuk kondisi no-match berlaku. - Sumber tidak menjawab -
502 Bad Gatewaydenganvalidation_errors[].code=empty_provider_responsedanretryable: true. Tidak ada yang terbukti tentang orang tersebut, tidak ada yang ditagih, dan permintaan aman untuk dicoba lagi. - Sumber menolak menjalankan kueri -
400 Bad Requestdenganvalidation_errors[].code=provider_rejected_inputdanretryable: false. Sumber tidak pernah melakukan pencarian karena tidak mau menerima data yang dikirim. Perbaiki data; mencoba lagi dengan nilai yang sama tidak akan berhasil. Tidak ada yang ditagih. - Sumber menjawab dan menolak input Anda -
502 Bad Gatewaydenganvalidation_errors[].code=provider_invalid_input(misalnya nomor rekening yang gagal pemeriksaan format milik bank). Mencoba lagi tidak ada gunanya sampai input diperbaiki; tidak ada yang ditagih. - Permintaan Anda tidak pernah keluar dari Didit -
400 Bad Request, yang mencantumkan kolom yang harus diperbaiki. Tidak ada yang ditagih.
502 sebagai sementara - AVS meneruskan permintaan ke bank pemegang rekening alih-alih membaca registri, sehingga ini adalah layanan Afrika Selatan yang paling lambat - dan coba lagi dengan jeda bertahap.
Lanjutkan membaca
Terakhir diubah pada 7 November 2026