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

# Bank Verification

> Verify bank account details by account number and IFSC

# Bank Account Verification

Verify bank account details instantly using account number and IFSC code. Returns account holder name, bank details, and account status.

## Overview

This endpoint helps businesses:

* Verify bank account ownership
* Validate IFSC codes
* Get account holder name for verification
* Confirm account status (Active/Inactive)

## Request

<ParamField body="accountNumber" type="string" required>
  Bank account number (9-18 digits)
</ParamField>

<ParamField body="ifscNumber" type="string" required>
  IFSC code of the bank branch (format: `XXXX0XXXXXX`)
</ParamField>

<ParamField body="async" type="boolean" default="true">
  If `true` (default), request is queued and result delivered via webhook. If `false`, wait for result synchronously (up to 30 seconds).
</ParamField>

### Headers

| Header         | Value              | Required |
| -------------- | ------------------ | -------- |
| `X-API-Key`    | Your API key       | Yes      |
| `Content-Type` | `application/json` | Yes      |

### Example Request (Async Mode - Default)

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.txncheck.com/api/v1/bank-verification-pennyless" \
    -H "X-API-Key: txncheck_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "accountNumber": "920020056012360",
      "ifscNumber": "UTIB0000519"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.txncheck.com/api/v1/bank-verification-pennyless",
      headers={
          "X-API-Key": "txncheck_your_api_key_here",
          "Content-Type": "application/json"
      },
      json={
          "accountNumber": "920020056012360",
          "ifscNumber": "UTIB0000519"
      }
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const response = await axios.post(
    'https://api.txncheck.com/api/v1/bank-verification-pennyless',
    {
      accountNumber: '920020056012360',
      ifscNumber: 'UTIB0000519'
    },
    {
      headers: {
        'X-API-Key': 'txncheck_your_api_key_here',
        'Content-Type': 'application/json'
      }
    }
  );
  console.log(response.data);
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init("https://api.txncheck.com/api/v1/bank-verification-pennyless");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "X-API-Key: txncheck_your_api_key_here",
      "Content-Type: application/json"
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
      "accountNumber" => "920020056012360",
      "ifscNumber" => "UTIB0000519"
  ]));
  $response = curl_exec($ch);
  curl_close($ch);
  echo $response;
  ```

  ```go Go theme={null}
  payload := map[string]string{
      "accountNumber": "920020056012360",
      "ifscNumber": "UTIB0000519",
  }
  body, _ := json.Marshal(payload)

  req, _ := http.NewRequest("POST", "https://api.txncheck.com/api/v1/bank-verification-pennyless", bytes.NewBuffer(body))
  req.Header.Set("X-API-Key", "txncheck_your_api_key_here")
  req.Header.Set("Content-Type", "application/json")

  client := &http.Client{}
  resp, _ := client.Do(req)
  ```
</CodeGroup>

### Example Request (Sync Mode)

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.txncheck.com/api/v1/bank-verification-pennyless" \
    -H "X-API-Key: txncheck_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "accountNumber": "920020056012360",
      "ifscNumber": "UTIB0000519",
      "async": false
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.txncheck.com/api/v1/bank-verification-pennyless",
      headers={
          "X-API-Key": "txncheck_your_api_key_here",
          "Content-Type": "application/json"
      },
      json={
          "accountNumber": "920020056012360",
          "ifscNumber": "UTIB0000519",
          "async": False
      }
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const response = await axios.post(
    'https://api.txncheck.com/api/v1/bank-verification-pennyless',
    {
      accountNumber: '920020056012360',
      ifscNumber: 'UTIB0000519',
      async: false
    },
    {
      headers: {
        'X-API-Key': 'txncheck_your_api_key_here',
        'Content-Type': 'application/json'
      }
    }
  );
  console.log(response.data);
  ```
</CodeGroup>

## Response

<Tabs>
  <Tab title="Async Mode (202)">
    ### 202 Accepted

    Request accepted and queued for processing. Results will be delivered via webhook.

    ```json theme={null}
    {
      "statusCode": 202,
      "message": "Request accepted and queued for processing",
      "requestId": "550e8400-e29b-41d4-a716-446655440000",
      "status": "QUEUED"
    }
    ```

    ### Result Data (via webhook or polling)

    When the request completes, you'll receive a webhook or can poll the status endpoint:

    ```json theme={null}
    {
      "requestId": "550e8400-e29b-41d4-a716-446655440000",
      "method": "bank-verification-pennyless",
      "status": "COMPLETED",
      "result": {
        "bankVerification": {
          "accountNumber": "920020056012360",
          "ifsc": "UTIB0000519",
          "nameAtBank": "Alex Kumar",
          "bankName": "AXIS BANK",
          "branchName": "Mumbai Main Branch",
          "accountType": "Savings",
          "accountStatus": "Active",
          "verifiedOn": "2024-01-20T10:30:00Z"
        }
      },
      "webhookStatus": "SENT",
      "createdAt": "2025-01-11T10:30:00.000Z",
      "completedAt": "2025-01-11T10:30:02.000Z"
    }
    ```
  </Tab>

  <Tab title="Sync Mode (200)">
    ### 200 OK

    Request completed synchronously. Result is returned in the response body.

    ```json theme={null}
    {
      "statusCode": 200,
      "requestId": "550e8400-e29b-41d4-a716-446655440000",
      "method": "bank-verification-pennyless",
      "status": "COMPLETED",
      "result": {
        "bankVerification": {
          "accountNumber": "920020056012360",
          "ifsc": "UTIB0000519",
          "nameAtBank": "Alex Kumar",
          "bankName": "AXIS BANK",
          "branchName": "Mumbai Main Branch",
          "accountType": "Savings",
          "accountStatus": "Active",
          "verifiedOn": "2024-01-20T10:30:00Z"
        }
      },
      "createdAt": "2025-01-11T10:30:00.000Z",
      "completedAt": "2025-01-11T10:30:02.000Z"
    }
    ```

    <Warning>
      Sync mode has a 30-second timeout. If processing takes longer, you'll receive a 408 Request Timeout error. Use async mode for potentially slow requests.
    </Warning>
  </Tab>
</Tabs>

### Result Fields

| Field           | Type   | Description                                     |
| --------------- | ------ | ----------------------------------------------- |
| `accountNumber` | string | The verified bank account number                |
| `ifsc`          | string | IFSC code of the bank branch                    |
| `nameAtBank`    | string | Account holder name as registered with the bank |
| `bankName`      | string | Name of the bank                                |
| `branchName`    | string | Name of the bank branch                         |
| `accountType`   | string | Type of account (Savings, Current, etc.)        |
| `accountStatus` | string | Account status (Active, Inactive, etc.)         |
| `verifiedOn`    | string | ISO 8601 timestamp of verification              |

## Error Responses

### 400 Bad Request

Invalid account number or IFSC format.

```json theme={null}
{
  "statusCode": 400,
  "message": ["Account number must be 9-18 digits", "IFSC must be in format XXXX0XXXXXX"],
  "error": "Bad Request"
}
```

### 401 Unauthorized

Invalid or missing API key.

```json theme={null}
{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}
```

### 402 Payment Required

Insufficient account balance.

```json theme={null}
{
  "statusCode": 402,
  "message": "Insufficient wallet balance",
  "error": "Payment Required"
}
```

### 403 Forbidden

Method not enabled for your account.

```json theme={null}
{
  "statusCode": 403,
  "message": "Access to method 'bank-verification-pennyless' is not allowed",
  "error": "Forbidden"
}
```

### 404 Not Found

Bank account not found or invalid.

```json theme={null}
{
  "statusCode": 404,
  "message": "Bank account not found or invalid",
  "error": "Not Found"
}
```

### 408 Request Timeout (Sync Mode Only)

Request processing timed out. Only occurs with `async: false`.

```json theme={null}
{
  "statusCode": 408,
  "message": "Request processing timed out after 30 seconds. Use async mode or check status later with request ID: 550e8400-e29b-41d4-a716-446655440000",
  "error": "Request Timeout"
}
```

### 429 Too Many Requests

Rate limit exceeded.

```json theme={null}
{
  "statusCode": 429,
  "message": "Too Many Requests",
  "error": "Too Many Requests"
}
```

## Use Cases

<AccordionGroup>
  <Accordion title="Vendor Onboarding">
    Verify vendor bank accounts during registration to ensure payouts reach the correct recipients.
  </Accordion>

  <Accordion title="Loan Disbursement">
    Validate borrower bank accounts before disbursing loans to prevent failed transactions.
  </Accordion>

  <Accordion title="Refund Processing">
    Verify customer bank details before processing refunds to ensure successful credit.
  </Accordion>

  <Accordion title="Salary Payments">
    Validate employee bank accounts during HR onboarding for seamless salary disbursements.
  </Accordion>
</AccordionGroup>
