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"
}
}
]
}
🇿🇦 África do Sul
Validação de titular de conta bancária na África do Sul - API de verificação
Validação de titular de conta bancária na África do Sul pela Didit, com fonte oficial. Desde $0.40 por chamada, sem contratos nem mínimos.
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"
}
}
]
}
Confirma que uma conta bancária sul-africana pertence ao titular indicado, através do serviço interbancário de verificação do titular da conta. A Didit disponibiliza este serviço em
POST /v3/database-validation/ para que possa verificar os dados submetidos contra a fonte autorizada e receber resultados de correspondência normalizados.
Cobertura
- Cobertura: —
- País: África do Sul
- ID do serviço:
zaf_bank_account_holder - Domínio de dados: Financeiro
- Categoria: Banca
Entradas
| Campo | Obrigatório | Exemplo |
|---|---|---|
national_id | Sim | 8708150847085 |
bank_account_number | Sim | 1234567890 |
bank_name | Sim | ABSA |
account_type | Não | current |
first_name | Não | John |
last_name | Não | Doe |
initials | Não | JD |
email | Não | john.doe@example.com |
phone_number | Não | +15550101000 |
vendor_data | Não | user-1234 |
- Campos obrigatórios:
national_id,bank_account_number,bank_name - Campos opcionais:
account_type,first_name,last_name,initials,email,phone_number,vendor_data - Consentimento: Obrigatório
- Disponibilidade no fluxo: Disponível no fluxo com mapeamento de campos
- Cobertura: —
- Preço: $0.40 por consulta bem-sucedida
bank_account_number e bank_name não são impressos num documento de identidade, pelo que nenhum passo os produz por si só. Recolha-os a partir de uma resposta a um Questionário, de um campo extraído pelo Document AI ou de um valor que envie ao criar a sessão, e mapeie cada um deles no passo Validação de base de dados. Enquanto não forem mapeados, o editor de fluxos mostra este serviço desativado e indica o campo em falta. Em execução, um campo em falta significa que a verificação é ignorada antes de qualquer consulta, pelo que não é cobrado por uma base de dados que não pôde ser consultada.
Parâmetros do corpo
string
padrão:"ZAF"
obrigatório
Código de país ISO 3166-1 alfa-3 para este serviço de base de dados.Exemplo:
ZAFstring
padrão:"zaf_bank_account_holder"
obrigatório
Lista que contém o ID deste serviço. Fixar o serviço mantém o pedido limitado a esta base de dados específica.Exemplo:
zaf_bank_account_holderboolean
padrão:"true"
obrigatório
Consentimento explícito do utilizador final para este serviço.Exemplo:
truestring
padrão:"8708150847085"
obrigatório
Número de identificação nacional para este serviço.Exemplo:
8708150847085string
padrão:"1234567890"
obrigatório
Valor de
bank_account_number exigido por este serviço de base de dados.Exemplo: 1234567890string
padrão:"ABSA"
obrigatório
Valor de
bank_name exigido por este serviço de base de dados.Exemplo: ABSAstring
padrão:"current"
Valor de
account_type exigido por este serviço de base de dados.Exemplo: currentstring
Nome próprio a validar.Exemplo:
Johnstring
padrão:"Doe"
Apelido a validar.Exemplo:
Doestring
padrão:"JD"
Valor de
initials exigido por este serviço de base de dados.Exemplo: JDstring
Endereço de e-mail.Exemplo:
john.doe@example.comstring
Valor de
phone_number exigido por este serviço de base de dados.Exemplo: +15550101000string
padrão:"user-1234"
A sua referência estável de utilizador para esta pessoa, como o seu ID interno de utilizador. A Didit usa-a para ligar verificações independentes ao mesmo utilizador final e reduzir o ruído na deteção de duplicados.Exemplo:
user-1234Regras de entrada e notas de validação
account_typetem de ser um dos tipos de conta AVS sul-africanos:current,savings,transmission,subscriptionShare,notKnown. A correspondência não distingue maiúsculas de minúsculas. Omita o campo quando não souber o tipo de conta: a Didit envia entãonotKnown, e a verificação cruzada do tipo de conta é reportada como não confirmada, em vez de falhar o pedido.
Como chamar
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"
Todas as chamadas bem-sucedidas devolvem HTTP
200. O campo outcome_code indica o que aconteceu efetivamente, distinguindo, por exemplo, uma não correspondência biométrica real (BIOMETRIC_NO_MATCH) de uma selfie que não pôde ser lida (BIOMETRIC_IMAGE_UNUSABLE). O status apresentado é o estado predefinido da funcionalidade, e as ações de Correspondência parcial / Sem correspondência que tiver configurado podem substituí-lo.MATCH: o registo confirmou a identidade e todos os campos verificados corresponderam.{
"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: o número de identificação foi encontrado, mas um ou mais campos pessoais (normalmente o nome ou a data de nascimento) não corresponderam totalmente.{
"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: o registo não devolveu qualquer correspondência para os dados submetidos.{
"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"
}
}
]
}
Dados devolvidos
Os campos exatos apresentados emsource_data dependem do que o registo devolve. O exemplo gerado para zaf_bank_account_holder documenta atualmente esta estrutura normalizada:
accepts_creditsaccepts_debitsaccount_foundaccount_number_length_validaccount_openaccount_type_matchid_matchidentification_numberinitials_matchsurname_match
Preços e SLAs
As consultas de Verificação do titular da conta na África do Sul são faturadas apenas quando a Didit recebe um resultado conclusivo da fonte de validação.- Preço por chamada: $0.40 USD.
- Faturação: por consulta bem-sucedida. Não é cobrado quando o registo está inacessível, quando faltam campos obrigatórios ou quando o pedido é rejeitado antes de chegar à fonte.
- Latência: p95 típico < 2 s.
- Disponibilidade: 99.9% por trimestre do lado da Didit; a disponibilidade das fontes a jusante varia consoante o país e o conjunto de dados.
O que confirma um MATCH
A Verificação do titular da conta (AVS) é um conjunto de verificações cruzadas de sim/não, e não uma consulta de registos. A fonte nunca devolve um nome, um número de identificação nem um saldo de conta. Compara os dados que envia com o que o banco tem registado para essa conta e responde a cada comparação com um indicador. Osource_data contém esses indicadores:
account_found- o banco tem uma conta com este número. Tudo o resto não tem significado quando este valor éfalse.account_open- a conta está aberta. Uma conta pode ser encontrada e estar encerrada.id_match- a conta pertence ao número de identificação nacional que submeteu. Esta é a verificação para a qual o serviço existe.initials_match,surname_match- osinitialse olast_namesubmetidos correspondem ao titular da conta registado.account_type_match- oaccount_typesubmetido corresponde ao tipo real da conta.email_match,phone_match- oemaile ophone_numbersubmetidos correspondem aos dados de contacto que o banco tem registados.accepts_debits,accepts_credits- a conta pode receber ordens de débito e créditos.account_number_length_valid- o número da conta tem o comprimento que o banco espera.
MATCH- a conta existe e todos os campos que submeteu correspondem, incluindoid_match.PARTIAL_MATCH- a conta está associada ao titular identificado pelo número de identificação nacional submetido, mas pelo menos outro campo enviado não corresponde (por exemplo, um apelido escrito de forma diferente nos registos do banco). Ooutcome_detailindica os campos que falharam.NO_MATCH- o banco não tem nenhuma conta com esse número, ou a conta existe mas pertence a outra pessoa. Ambos são respostas conclusivas sobre a pessoa.
N a todos os campos que não foram fornecidos, pelo que surname_match, initials_match, email_match, phone_match e account_type_match só aparecem no source_data quando enviou o respetivo dado de entrada. Enviar apenas national_id, bank_account_number e bank_name continua, portanto, a produzir um MATCH completo.
Valores aceites de bank_name e account_type
bank_name e account_type são enumerações. Um valor fora de qualquer uma das listas é recusado antes de a consulta ser executada, pelo que um erro de escrita lhe custa uma ida e volta ao servidor e não uma cobrança.
account_type é opcional e aceita, sem distinção entre maiúsculas e minúsculas:
current · savings · transmission · subscriptionShare · notKnown
Omita-o quando não souber o tipo de conta. A Didit envia então notKnown, o pedido é concluído com êxito e account_type_match volta como false, porque não havia nada para comparar. Qualquer outro valor - checking, cheque, bond - é rejeitado com um 400 que lista o conjunto de valores aceites.
bank_name é obrigatório, e estes valores estão confirmados como aceites (sem distinção entre maiúsculas e minúsculas):
ABSA · Capitec · FNB · Nedbank · Standard Bank · Investec · African Bank · Discovery Bank · Old Mutual · Bank Zero · Tyme · Grindrod
As contas de particulares em todos estes bancos estão abrangidas, incluindo o Capitec. Envie a forma curta exatamente como indicada: Capitec, e não Capitec Bank; Tyme, e não TymeBank. Um banco não reconhecido devolve um resultado REGISTRY_ERROR cujo outcome_detail indica o campo que a fonte recusou.
Distinguir uma conta inexistente de uma fonte indisponível
Estes são resultados HTTP diferentes, por isso não é necessário analisar mensagens de erro:- A conta não existe -
200 OK,match_type: "no_match",outcome_code: "NO_MATCH",source_data.account_found: false. Uma resposta real do banco. A consulta é faturada, e aplica-se a sua ação para casos sem correspondência. - A fonte não respondeu -
502 Bad Gatewaycomvalidation_errors[].code=empty_provider_responseeretryable: true. Nada ficou estabelecido sobre a pessoa, nada é faturado, e o pedido pode ser repetido em segurança. - A fonte recusou executar a consulta -
400 Bad Requestcomvalidation_errors[].code=provider_rejected_inputeretryable: false. A fonte não pesquisou, porque não aceitaria o que lhe foi enviado. Corrija os dados; repetir os mesmos valores não pode resultar. Nada é faturado. - A fonte respondeu e rejeitou os dados enviados -
502 Bad Gatewaycomvalidation_errors[].code=provider_invalid_input(por exemplo, um número de conta que não passa a verificação de formato do banco). Repetir o pedido não serve de nada até os dados serem corrigidos; nada é faturado. - O pedido nunca saiu da Didit -
400 Bad Request, a indicar o campo a corrigir. Nada é faturado.
502 como transitório - a AVS encaminha o pedido para o banco do titular da conta em vez de ler um registo, pelo que é o mais lento dos serviços sul-africanos - e repita com espera progressiva.
Continuar a ler
Última modificação em 7 de novembro de 2026