StampMitraStampMitra Developers

Bank Account

● Live

Verify a Bank Account in real time.

POST/v1/verify/bank-account
● Live

Verify Bank Account

Validates and verifies a Bank Account. Requires the `verification.bank-account.read` scope on the API key. Metered as `bank-account.verify` after a successful upstream response - usage is only recorded (and the fulfilment wallet debited, for priced services) once Core returns a successful result.

Required scope: verification.bank-account.read

Parameters

NameTypeRequiredDescription
AuthorizationheaderYesBearer <api-key> (e.g. sk_test_... in sandbox, sk_live_... in production). The x-api-key header is also accepted.
accountNumberstringYes9-18 digit numeric bank account number.
ifscstringYes11-character IFSC code, e.g. ICIC0001234.
namestringNoBeneficiary name to match.

curl

curl -X POST "https://api.stampmitra.in/v1/verify/bank-account" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"accountNumber":"000123456789","ifsc":"ICIC0001234","name":"Ravi Kumar"}'

JavaScript (fetch)

const res = await fetch("https://api.stampmitra.in/v1/verify/bank-account", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk_test_xxxxxxxxxxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"accountNumber":"000123456789","ifsc":"ICIC0001234","name":"Ravi Kumar"})
});
const data = await res.json();

Example request

{
  "accountNumber": "000123456789",
  "ifsc": "ICIC0001234",
  "name": "Ravi Kumar"
}

Example response

{
  "requestId": "vr_9f3a1c2b8e4d4a5f",
  "status": "SUCCESS",
  "verified": true,
  "source": "GOVERNMENT_DATABASE",
  "data": {
    "accountNumber": "000123456789",
    "ifsc": "ICIC0001234",
    "bankName": "ICICI Bank",
    "branchName": "Andheri West",
    "accountExists": true,
    "beneficiaryName": "RAVI KUMAR",
    "nameMatch": true,
    "nameMatchScore": 0.95,
    "accountStatus": "ACTIVE"
  },
  "meta": {
    "organizationId": "org_5f2c1a9b3d7e4f6a",
    "environment": "SANDBOX",
    "billedEvent": "bank-account.verify",
    "completedAt": "2026-09-25T10:15:32.481Z"
  }
}

Error responses

401 — Missing or invalid API key

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

403 — Valid key, missing required scope

{
  "error": {
    "code": "FORBIDDEN",
    "message": "API key is valid but lacks the required scope for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

400 — Validation error

{
  "error": {
    "code": "BAD_REQUEST",
    "message": "accountNumber must be a 9-18 digit numeric bank account number",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

402 — Insufficient wallet balance

{
  "error": {
    "code": "PAYMENT_REQUIRED",
    "message": "Insufficient fulfilment wallet balance to cover this call.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

429 — Rate limited

{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Input format is validated with class-validator (@Matches/@IsDateString/@IsOptional) before the request ever leaves stampmitra-b2b-platform - a malformed pan/gstin/etc. fails fast with a 400 and never reaches the upstream provider.