> For the complete documentation index, see [llms.txt](https://blufin360-api-documentation.gitbook.io/blufin360_api_documentation-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blufin360-api-documentation.gitbook.io/blufin360_api_documentation-docs/bank-verification/penny-less.md).

# Penny Less

Verify a bank account without initiating a fund transfer.

The API validates:

* Account existence
* Account status
* Beneficiary name (as per bank records)

#### **Endpoints**

* **UAT / Staging**: <mark style="color:$primary;">`apidev.blufin360.com`</mark>
* **Production**: <mark style="color:$primary;">`api.blufin360.com`</mark>

**Path:**&#x20;

<mark style="color:$primary;">`POST /api/v1/kyc/verify-account`</mark>

## Authentication

Use a JWT access token in the `Authorization` header.

Generate the token using [<mark style="color:$primary;">Authentication</mark>](/blufin360_api_documentation-docs/getting-started/authentication.md).

### Example request

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location 'https://apidev.blufin360.com/api/v1/kyc/verify-account' \
  --header 'Authorization: Bearer <accessToken>' \
  --header 'Content-Type: application/json' \
  --data '{
    "beneficiary": {
      "name": "Pratik Kumar",
      "phone_number": "901121XXXX",
      "account_number": "102507XXXXX",
      "ifsc": "IDFBXXXXXXX"
    },
    "verification_type": "PENNY_LESS",
    "service_sub_type": "BANK_VERIFICATION_PENNY_LESS"
  }'
```

{% endtab %}

{% tab title="fetch" %}

```javascript
const url = "https://apidev.blufin360.com/api/v1/kyc/verify-account";

const res = await fetch(url, {
  method: "POST",
  headers: {
    Authorization: "Bearer <accessToken>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    beneficiary: {
      name: "Pratik Kumar",
      phone_number: "901121XXXX",
      account_number: "102507XXXXX",
      ifsc: "IDFBXXXXXXX",
    },
    verification_type: "PENNY_LESS",
    service_sub_type: "BANK_VERIFICATION_PENNY_LESS",
  }),
});

const data = await res.json();
console.log(data);
```

{% endtab %}

{% tab title="requests" %}

```python
import requests

url = "https://apidev.blufin360.com/api/v1/kyc/verify-account"

payload = {
  "beneficiary": {
    "name": "Pratik Kumar",
    "phone_number": "901121XXXX",
    "account_number": "102507XXXXX",
    "ifsc": "IDFBXXXXXXX"
  },
  "verification_type": "PENNY_LESS",
  "service_sub_type": "BANK_VERIFICATION_PENNY_LESS"
}

headers = {
  "Authorization": "Bearer <accessToken>",
  "Content-Type": "application/json"
}

resp = requests.post(url, json=payload, headers=headers)
print(resp.json())
```

{% endtab %}

{% tab title="net/http" %}

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://apidev.blufin360.com/api/v1/kyc/verify-account"

	jsonBody := []byte(`{
  "beneficiary": {
    "name": "Pratik Kumar",
    "phone_number": "901121XXXX",
    "account_number": "102507XXXXX",
    "ifsc": "IDFBXXXXXXX"
  },
  "verification_type": "PENNY_LESS",
  "service_sub_type": "BANK_VERIFICATION_PENNY_LESS"
}`)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody))
	req.Header.Set("Authorization", "Bearer <accessToken>")
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="HttpClient (Java 11+)" %}

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws Exception {
    String url = "https://apidev.blufin360.com/api/v1/kyc/verify-account";

    String json = """
      {
        "beneficiary": {
          "name": "Pratik Kumar",
          "phone_number": "901121XXXX",
          "account_number": "102507XXXXX",
          "ifsc": "IDFBXXXXXXX"
        },
        "verification_type": "PENNY_LESS",
        "service_sub_type": "BANK_VERIFICATION_PENNY_LESS"
      }
      """;

    HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create(url))
      .header("Authorization", "Bearer <accessToken>")
      .header("Content-Type", "application/json")
      .POST(HttpRequest.BodyPublishers.ofString(json))
      .build();

    HttpClient client = HttpClient.newHttpClient();
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

    System.out.println(response.body());
  }
}
```

{% endtab %}

{% tab title="cURL (PHP)" %}

```php
<?php

$url = "https://apidev.blufin360.com/api/v1/kyc/verify-account";

$payload = json_encode([
  "beneficiary" => [
    "name" => "Pratik Kumar",
    "phone_number" => "901121XXXX",
    "account_number" => "102507XXXXX",
    "ifsc" => "IDFBXXXXXXX"
  ],
  "verification_type" => "PENNY_LESS",
  "service_sub_type" => "BANK_VERIFICATION_PENNY_LESS"
]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  "Authorization: Bearer <accessToken>",
  "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
```

{% endtab %}
{% endtabs %}

### Headers

| Header        | Type     | Required | Description                   | Format                                 |
| ------------- | -------- | -------- | ----------------------------- | -------------------------------------- |
| Authorization | `string` | ✅        | Access token for auth         | Authorization: Bearer `<access_token>` |
| Content-Type  | `string` | ✅        | Specifies request body format | application/json                       |

### Request payload

```json
{
  "beneficiary": {
    "name": "Pratik Kumar",
    "phone_number": "901121XXXX",
    "account_number": "102507XXXXX",
    "ifsc": "IDFBXXXXXXX"
  },
  "verification_type": "PENNY_LESS",
  "service_sub_type": "BANK_VERIFICATION_PENNY_LESS"
}
```

### Body

| Field              | Type     | Required | Description                                              |
| ------------------ | -------- | -------- | -------------------------------------------------------- |
| beneficiary        | `object` | ✅        | Beneficiary account details                              |
| name               | `string` | ✅        | Account holder’s name                                    |
| phone\_number      | `string` | ✅        | Registered mobile number                                 |
| account\_number    | `string` | ✅        | Bank account number                                      |
| IFSC               | `string` | ✅        | 11 character IFSC code                                   |
| verification\_type | `string` | ✅        | Verification Method (PENNY\_LESS)                        |
| service\_sub\_type | `string` | ✅        | Service classification (BANK\_VERIFICATION\_PENNY\_LESS) |

### Success Response — <mark style="color:$primary;">200</mark> (example)

```json
{
    "status": "success",
    "status_code": 200,
    "message": "KYC verification completed successfully",
    "data": {
        "ref_id": "BLF20260207073439c2d75951",
        "account_exists": false,
        "name_at_bank": null,
        "message": "Invalid account number or ifsc provided",
        "verification_type": "PENNY_LESS",
        "utr": null,
        "currency": null,
        "amount_deposited": null
    },
    "detail": null
}
```

### Response fields

| Field        | Type            | Description                 |
| ------------ | --------------- | --------------------------- |
| status       | `string`        | Request execution status    |
| status\_code | `integer`       | HTTP status code            |
| message      | `string / null` | Top-level message (if any)  |
| data         | `object`        | Verification result payload |
| detail       | `string / null` | Additional error/debug info |

### **Failure Response —&#x20;**<mark style="color:$danger;">**400**</mark>

Same structure applies for failure responses (status/message/data/detail).

#### Common Error

No specific errors provided in the source content.
