BANK IFSC DETAILS API
Directory lookup that resolves an IFSC code to the bank name, branch, full address, city, district, state, contact number, MICR code and the supported payment rails (NEFT, RTGS, IMPS, UPI).
Authentication
API key + API secret headers, or a Bearer JWT. Obtain the JWT from POST /api/v1/auth/token using your key and secret; tokens are valid for 3600 seconds.
| Scheme | Location | Value |
|---|---|---|
| JWT bearer | Header | Authorization: Bearer <token> |
| API key | Header | X-API-Key: pk_xxxxxxxx |
| API secret | Header | X-API-Secret: sk_xxxxxxxx |
Headers
| Header | Required | Description |
|---|---|---|
| Authorization | Optional | Bearer JWT issued by the token endpoint. |
| X-API-Key | Yes | Your API key (pk_…). |
| X-API-Secret | Yes | Your API secret (sk_…), shown once at creation. |
| Content-Type | Yes | application/json |
| X-Request-Id | No | Your idempotency key; echoed back in the response. |
Parameters & validation rules
| Name | Type | Required | Validation | Description |
|---|---|---|---|---|
| ifsc | string | Yes | /^[A-Z]{4}0[A-Z0-9]{6}$/ | 11-character IFSC, e.g. HDFC0001234. |
Example request
curl -X GET 'https://api.yourdomain.com/api/v1/bank-ifsc-details?ifsc=HDFC0001234' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'x-api-secret: YOUR_API_SECRET' \
-H 'Accept: application/json'
<?php
$query = http_build_query(['ifsc' => 'HDFC0001234']);
$ch = curl_init('https://api.yourdomain.com/api/v1/bank-ifsc-details?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-api-key: YOUR_API_KEY',
'x-api-secret: YOUR_API_SECRET',
'Accept: application/json',
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response['data']);
const params = new URLSearchParams({"ifsc": "HDFC0001234"});
const res = await fetch(`https://api.yourdomain.com/api/v1/bank-ifsc-details?${params}`, {
headers: {
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
},
});
const json = await res.json();
console.log(json.data);
import requests
res = requests.get(
'https://api.yourdomain.com/api/v1/bank-ifsc-details',
params={"ifsc": "HDFC0001234"},
headers={
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
},
timeout=30,
)
print(res.json()['data'])
import java.net.URI;
import java.net.http.*;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.yourdomain.com/api/v1/bank-ifsc-details?ifsc=HDFC0001234"))
.header("x-api-key", "YOUR_API_KEY")
.header("x-api-secret", "YOUR_API_SECRET")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.yourdomain.com/api/v1/bank-ifsc-details?ifsc=HDFC0001234", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
req.Header.Set("x-api-secret", "YOUR_API_SECRET")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
Responses
Success 200
{
"success": true,
"request_id": "req_8f21c0b4a7",
"meta": {
"charged": 0.5,
"environment": "production",
"balance": 4821.5,
"response_ms": 312
},
"data": {
"ifsc": "HDFC0001234",
"bank": "HDFC BANK",
"branch": "KORAMANGALA",
"address": "80 Feet Road, Koramangala, Bengaluru",
"city": "BENGALURU",
"district": "BENGALURU URBAN",
"state": "KARNATAKA",
"contact": "080-41156789",
"micr": "560240012",
"neft": true,
"rtgs": true,
"imps": true,
"upi": true
}
}
Error 4xx
{
"success": false,
"request_id": "req_8f21c0b4a7",
"error": {
"code": "IFSC_NOT_FOUND",
"message": "No branch found for the supplied IFSC code."
},
"meta": {
"charged": 0
}
}
HTTP status codes
| Code | Meaning |
|---|---|
| 200 | Success - verification completed and wallet debited. |
| 400 | Validation failed - check the parameter rules below. |
| 401 | Missing or invalid JWT / API key. |
| 402 | Insufficient wallet balance. |
| 403 | API not purchased or key not permitted for this endpoint. |
| 404 | Record not found at the source registry. |
| 422 | Upstream provider returned an unprocessable response. |
| 429 | Rate limit exceeded - retry after the window resets. |
| 500 | Unexpected server error - safe to retry with the same request_id. |
| 503 | Upstream registry temporarily unavailable. |
Rate limit & billing
Rate limit
60 req/min per key
Charge
₹0.50 per successful call
Failed calls
Not charged (4xx/5xx)
When throttled, the API returns 429 with X-RateLimit-Limit, X-RateLimit-Remaining and Retry-After headers.