Account Verification (Penny Drop)
Verify a bank account by depositing ₹1 into the account. Returns the beneficiary name, verification status, and full IFSC branch details including supported payment channels.
Endpoint
POST /vas-api/v1/account-verification-pd
Authentication
Requires OAuth2 Bearer token. Get your credentials →
Request
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Bearer YOUR_ACCESS_TOKEN |
| Content-Type | string | Yes | application/json |
Body parameters
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| accountNumber | string | Yes | Bank account number | 1234567890123456 |
| ifscNumber | string | Yes | 11-character IFSC code (4 letters + 0 + 6 characters) | SBIN0001234 |
Example request
bash
curl -X POST https://api.api4business.com/vas-api/v1/account-verification-pd \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"accountNumber": "1234567890123456", "ifscNumber": "SBIN0001234"}'python
import requests
response = requests.post(
"https://api.api4business.com/vas-api/v1/account-verification-pd",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
json={
"accountNumber": "1234567890123456",
"ifscNumber": "SBIN0001234"
}
)
print(response.json())javascript
const response = await fetch(
"https://api.api4business.com/vas-api/v1/account-verification-pd",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
accountNumber: "1234567890123456",
ifscNumber: "SBIN0001234"
})
}
);
console.log(await response.json());java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.api4business.com/vas-api/v1/account-verification-pd"))
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"accountNumber\": \"1234567890123456\", \"ifscNumber\": \"SBIN0001234\"}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Response
Success (200)
| Field | Type | Description |
|---|---|---|
| ok | boolean | true if the request was successful |
| responseCode | number | HTTP status code |
| message | string | Status message (Transmission OK) |
| body.accountNumber | string | The account number that was verified |
| body.beneficiaryName | string | Name of the account holder as registered with the bank |
| body.verificationStatus | string | Verification result: VERIFIED or NOT_VERIFIED |
| body.transactionRemark | string | Transaction status message |
| body.isPennyDrop | boolean | Always true for penny drop verification |
| body.ifscDetails.ifsc | string | IFSC code of the branch |
| body.ifscDetails.name | string | Bank name |
| body.ifscDetails.branch | string | Branch name |
| body.ifscDetails.district | string | District of the branch |
| body.ifscDetails.state | string | State of the branch |
| body.ifscDetails.imps | boolean | Whether IMPS is supported |
| body.ifscDetails.rtgs | boolean | Whether RTGS is supported |
| body.ifscDetails.neft | boolean | Whether NEFT is supported |
| body.ifscDetails.upi | boolean | Whether UPI is supported |
Example response
json
{
"ok": true,
"responseCode": 200,
"message": "Transmission OK",
"body": {
"accountNumber": "1234567890123456",
"beneficiaryName": "Sample Account Holder",
"transactionRemark": "Transaction Successful",
"verificationStatus": "VERIFIED",
"isPennyDrop": true,
"ifscDetails": {
"ifsc": "SBIN0001234",
"name": "State Bank of India",
"branch": "Mumbai Main",
"district": "Mumbai",
"state": "MAHARASHTRA",
"city": "Mumbai",
"imps": true,
"rtgs": true,
"neft": true,
"upi": true,
"micr": "400002001",
"iso3166": "IN-MH",
"swift": null
}
}
}Response headers
| Header | Description |
|---|---|
| x-request-id | Unique request identifier — log this for debugging and support |
Error responses
| Status | Error Code | Message | Resolution |
|---|---|---|---|
| 400 | 400 | Invalid Account Number | Verify the account number format and length |
| 400 | 400 | Invalid Request | Check JSON body contains accountNumber and ifscNumber |
| 401 | 401 | Invalid Credentials | Access token expired or invalid — request a new one |
| 429 | 429 | Quota Violation | Rate limit exceeded — implement exponential backoff |
| 500 | 500 | Internal Server Error | Retry after 1-5 seconds |
| 503 | 503 | Service Not Available | Upstream bank service down — retry with backoff |
Some validation errors return HTTP 200
This API may return validation errors with HTTP 200 status code. Always check the response body for error indicators:
json
{
"errorCode": 200,
"errorType": "proxy",
"errorMessage": "Invalid Account Number"
}Other 200-status errors: Invalid IFSC, Bank IFSC must be 11 characters, Daily Transaction Limit exhausted for bank account number.
Related
- Account Verification (Penny-less) — Verify without deposit
- IFSC Lookup — Look up branch details
- Bank Verification Overview
- Error Handling Guide