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

# Bank Account Verification

> Verifies client bank account numbers for South African banks, validating account details against identity information.



## OpenAPI

````yaml /api-reference/specs/quickcheck.json post /v2/api/identity/za/bav
openapi: 3.0.3
info:
  title: Youverify Quick Check API
  version: 2.0.0
  description: >-
    All Quick Check endpoints (KYC identity verification by country, KYB
    business verification by country, and AML/watchlist screening). Assembled
    from doc.youverify.co/api-reference-sdk/api-reference/quick-check, endpoints
    kept in the exact order they appear in the GitBook navigation. Some
    endpoints (address-verification "create a candidate" / "get states" /
    "retrieve" / "history") are documented twice in the source docs — once for
    individuals under KYC, once for businesses under KYB — and are the exact
    same request/response shape. They appear ONCE here (at their first, KYC,
    position) tagged with both sections so the file stays valid OpenAPI.


    Account-wide error responses (401, 429, 500 on every endpoint; 402 on paid
    verification calls; 404 on lookup-by-ID calls) are sourced verbatim from
    Youverify's own "Youverify OS Error Codes" and "Response Codes" pages
    (doc.youverify.co/youverify-os-error-codes, /get-started/response-codes) and
    attached via components.responses, since those pages document them
    account-wide rather than per endpoint. Any error example that a specific
    endpoint's own page actually showed is kept exactly as documented there
    instead of being replaced by these.
  contact:
    name: Youverify Support
    email: support@youverify.co
servers:
  - url: https://api.youverify.co
    description: Production (live, billed)
  - url: https://api.sandbox.youverify.co
    description: Sandbox (test data, not billed)
security:
  - ApiKeyAuth: []
tags:
  - name: KYC - Global
    description: Identity data-matching endpoints that work across countries.
  - name: KYC - South Africa
    description: South Africa-specific identity, phone and bank verification.
  - name: KYC - Kenya
    description: Kenya-specific identity, phone, bank, credit and employment verification.
  - name: KYC - Ghana
    description: Ghana-specific identity verification (passport, SSNIT, voter's card).
  - name: KYC - Nigeria
    description: >-
      Nigeria-specific identity, phone, bank and credit verification (BVN, NIN,
      etc).
  - name: KYC - Cote D'Ivoire
    description: Cote D'Ivoire-specific national ID and residence card verification.
  - name: KYC - General
    description: >-
      Identity retrieval, history and facial comparison, not tied to one
      country.
  - name: KYC - Address Verification (Individuals)
    description: >-
      Physical and digital address verification workflows for individuals. Note:
      these same endpoints are also documented under KYB for businesses — see
      merge notes.
  - name: KYB - Global
    description: >-
      Business search, bulk-upload and premium company-search endpoints not tied
      to one country.
  - name: KYB - Nigeria
    description: Nigeria-specific business address verification and tax ID checks.
  - name: KYB - South Africa
    description: South Africa-specific business account and address verification.
  - name: KYB - Cote D'Ivoire
    description: Cote D'Ivoire-specific company filings lookup.
  - name: AML Screening
    description: PEP, sanctions, adverse-media and crypto AML screening.
  - name: AML Watchlist
    description: Manage your own custom AML watchlist.
paths:
  /v2/api/identity/za/bav:
    post:
      tags:
        - KYC - South Africa
      summary: Bank Account Verification
      description: >-
        Verifies client bank account numbers for South African banks, validating
        account details against identity information.
      operationId: bankAccountVerificationSouthAfrica
      parameters:
        - name: token
          in: header
          required: true
          schema:
            type: string
          description: API secret token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: User's identity number
                isSubjectConsent:
                  type: boolean
                  description: Indicate subject has given consent. Must be true
                accountDetails:
                  type: object
                  description: Container for account information
                  properties:
                    bankBranchCode:
                      type: string
                      description: Account bank branch code
                    bank:
                      type: string
                      description: Account bank
                    accountNumber:
                      type: string
                      description: Account number
                    accountType:
                      type: string
                      description: Account Type
                  required:
                    - bankBranchCode
                    - accountNumber
                    - accountType
                validations:
                  type: object
                  description: Validation object
                  properties:
                    data:
                      type: object
                      description: Validation data object
                      properties:
                        lastName:
                          type: string
                          description: Last name to compare against ID
                        firstName:
                          type: string
                          description: First name to compare against ID
                        middleName:
                          type: string
                          description: Middle name to compare against ID
                        email:
                          type: string
                          description: Email to compare against ID
                        phoneNumber:
                          type: string
                          description: Phone number to compare against ID
              required:
                - id
                - isSubjectConsent
                - accountDetails
            example:
              validations:
                data:
                  firstName: CONCO
                  middleName: ''
                  lastName: ''
                  email: email@email.com
                  phoneNumber: '0795030317'
              accountDetails:
                bankBranchCode: '470010'
                bank: ''
                accountNumber: '1443535328'
                accountType: Savings
              id: '8203170496089'
              isSubjectConsent: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              example:
                success: true
                statusCode: 200
                message: success
                data:
                  id: 645bca7cd80de606cd7e5ad3
                  validations:
                    data:
                      phoneNumber:
                        validated: false
                        value: '0795030317'
                      fullName:
                        validated: true
                        value: CONCO
                      email:
                        validated: false
                        value: bonisiwez466@gmail.com
                    validationMessages: Email does not match, Phone Number does not match
                  parentId: null
                  status: found
                  reason: null
                  dataValidation: true
                  identityNumberValid: 'No'
                  accountTypeValid: 'Yes'
                  accountStatus: Open
                  acceptsDebits: 'Yes'
                  acceptsCredits: 'Yes'
                  accountNumberValid: 'Yes'
                  bavRiskOutcome: Low
                  isConsent: true
                  accountNumber: '1443535328'
                  idNumber: '8203170496089'
                  businessId: 628b38f03ae28a14f52d4bf7
                  type: zaBAV
                  allValidationPassed: false
                  requestedAt: '2023-05-10T16:47:20.552Z'
                  requestedById: 628b38f13ae28a7b742d4bf9
                  country: ZA
                  createdAt: '2023-05-10T16:47:20.938Z'
                  lastModifiedAt: '2023-05-10T16:47:20.938Z'
                  metadata: {}
                  requestedBy:
                    firstName: Onyeka
                    lastName: Ijeh
                    middleName: ''
                    id: 628b38f13ae28a7b742d4bf9
                links: []
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '402':
          $ref: '#/components/responses/Error402PaymentRequired'
        '404':
          description: Resource not found
          content:
            application/json:
              example:
                success: false
                statusCode: 404
                message: You have attempted to get a resource that does not exist.
                name: ResourceNotFoundError
                data: {}
        '429':
          $ref: '#/components/responses/Error429TooManyRequests'
        '500':
          $ref: '#/components/responses/Error500ServerError'
components:
  responses:
    Error401Unauthorized:
      description: Unauthorized — the token header is missing or invalid.
      content:
        application/json:
          example:
            success: false
            statusCode: 401
            message: Permission denied
            name: UnauthorizedError
            data: {}
    Error402PaymentRequired:
      description: Payment Required — your account balance is too low to run this check.
      content:
        application/json:
          example:
            success: false
            statusCode: 402
            message: Insufficient fund
            name: PaymentRequiredError
            data: {}
    Error429TooManyRequests:
      description: Too Many Requests — you have exceeded the rate limit; wait and retry.
      content:
        application/json:
          example:
            success: false
            statusCode: 429
            message: Too many requests
            name: RateLimitError
            data: {}
    Error500ServerError:
      description: >-
        Internal Server Error — a rare, unexpected failure on Youverify's side.
        Contact support@youverify.co if it persists.
      content:
        application/json:
          example:
            success: false
            statusCode: 500
            message: Internal Server Error
            name: Error
            data: {}
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: token
      description: Your Youverify API secret key. Never expose client-side.

````