SubhX Verify · the Validation SuiteAdd-on

Check a bank account in one call.

Send an account number and an IFSC; get back whether the account is real and whose name is on it. One prepaid API, priced per call, with a wallet you top up in rupees — and an automatic refund on any call we could not get an answer for.

Or go the other way with UPI — coming soon. Send a UPI ID on its own — no account number, no IFSC — and get back the account number, the IFSC, the bank and branch, and the name at the bank. It is priced and documented below, and refused until it opens. See both types

₹2.00 / validationPrepaid API walletRefunded when we can't answerFree sandbox keysNo HR product required
No monthly fee to switch it onYour own request_id, so a retry never double-charges
A 3D shield and padlock orbited by fingerprint, ID-card and password icons — the SubhX Validation Suite

Bank account validation

val_01J9ZK7XH4

Valid

Account

******7613

IFSC

KKBK0005294

Name at bank
PRIYA NAIR
Bank
KOTAK MAHINDRA BANK
Your request_id
loan-9001-bank-1
Charged to your API wallet₹2.00

Illustrative — the fields are the ones the API returns.

What you can validate

Two types, documented. The rest, honestly labelled.

We would rather document the two that matter, with their real status on the card, than list eleven and let you find out which one answers. The badge on each card is read from our catalogue, not written into this page — so what it says is what the API will do.

  • Bank account

    Live

    Send an account number and an IFSC. You get back whether the account is valid, and the name at the bank, the bank and the branch where the provider returns them.

    You send

    • Account number
    • IFSC

    You get back

    • Valid or invalid
    • Name at bank
    • Bank + branch

    “No such account”, a closed account and one that cannot receive credits are all definitive answers to have asked for — and all charged.

    ₹2.00

    per validation

  • UPI (penny drop)

    Coming soon

    Send nothing but a UPI ID — no account number, no IFSC. A ₹1 UPI transaction is pushed to it and the UPI rails hand back the account sitting behind it: the account number, the IFSC, the bank and branch, and the name registered at the bank.

    You send

    • UPI ID (name@bank)
    • Explicit consent
    • Name to match (optional)

    You get back

    • Account number
    • IFSC
    • Bank + branch
    • Name at bank
    • UTR
    • Name-match score (when you send a name)

    Consent is not optional and we will not assert it for you: you tell us it was obtained, and that assertion is recorded against the call. A drop that never settles is a non-answer, so it is refunded rather than charged.

    Not callable yet. A call to it today is refused with 409 TYPE_NOT_AVAILABLE — nothing is sent anywhere and nothing is charged. The rate beside it is the catalogue's published price for when it opens.

Also coming soon

In the catalogue, not yet callable, and not yet documented beyond their names. A call to one is refused with 409 TYPE_NOT_AVAILABLE — never charged, never queued.

  • PANComing soon

    Check a Permanent Account Number.

  • GSTComing soon

    Check a GSTIN and its registration details.

  • AadhaarComing soon

    Check an Aadhaar number.

  • IFSCComing soon

    Resolve the bank and branch behind an IFSC code.

  • Driving licenceComing soon

    Check a driving licence number.

  • Voter IDComing soon

    Check a Voter ID (EPIC) number.

  • PassportComing soon

    Check a passport file number.

  • MobileComing soon

    Check an Indian mobile number.

  • PAN → GSTINComing soon

    List the GSTINs registered against a PAN.

How the money works

A prepaid wallet with an audit trail you can follow

Per-call pricing is only fair if you can see what you were charged for. Every debit and every refund is a line in a ledger that cannot be edited after the fact.

  • Prepaid, and its own wallet

    Validations are paid from a dedicated API wallet, separate from anything else you buy from us. Top it up by request and it is credited once we approve it — no card on file, no auto-debit, no surprise invoice at month end.

  • An answer is an answer

    You are charged when we come back with a definitive result — and “this account does not exist” is a definitive result. It is the answer you asked for, it costs us the same as a match, and it is usually the one you most needed to hear.

  • No answer, no charge

    If we cannot reach an answer at all — a timeout, a provider that is down, a response we cannot make sense of, a UPI drop that never settles — the charge is refunded automatically. You do not raise a ticket and you do not wait for a credit note.

  • Every refund points at its charge

    A refund carries the same validation id as the debit it reverses and links back to that exact row, so “which call was this for?” is never guesswork. A charge can be refunded once and only once.

  • Opening and closing on every line

    The wallet ledger is append-only, and each entry records the balance before it and the balance after. The lines form a continuous chain, so your balance is always the arithmetic of your history rather than a number we assert.

  • It cannot go below zero

    The balance is not allowed to go negative — that is a constraint inside the database, not a check in our code, so no code path can overdraw your wallet. A call you cannot afford is refused before anything is spent.

A lookup that failed, in your ledger

val_01J9ZK81QM

Debit

validation.bank_account

−₹2.00

Refund

reverses the debit above

+₹2.00

Two lines, the same validation id, and a closing balance back where it started. Both carry the balance before and after, so the pair reconciles on its own.

Idempotency

You name the call. One name, one outcome.

Every call carries a request_id that you choose — your loan id, your application number, whatever you already key on. It is the idempotency key, so a network blip, a retry loop or a nervous second click cannot cost you twice.

  • Same request_id, same input → the stored result, and no second charge
  • Same request_id, different input → refused, so one id can never mean two things
  • Already in flight → refused, rather than sent to the bank twice
  • A failed call keeps returning its failure; to try again, send a new request_id

Your id

request_id

6–64 chars, yours to choose

Our id

validation_id

on the charge and its refund

A retry

No charge

the stored result comes back

A reuse

409

REQUEST_ID_REUSED

The whole API

One POST, one JSON answer

Mint a Platform API key in your dashboard, send a POST, read a JSON answer. No SDK to install, no callback to host, no vendor name to learn. Each validation type is its own path with its own fields, and a new one arriving never changes the shape of one you already call.

The request
curl -s -X POST https://nexus.subhx.in/api/public/v1/validations/bank-account \
  -H "Authorization: Bearer $SUBHX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_id": "loan-9001-bank-1",
    "account_number": "2314497613",
    "ifsc": "KKBK0005294"
  }'
200 — a definitive answer
{
  "success": true,
  "data": {
    "validation_id": "val_01J9ZK7XH4",
    "request_id": "loan-9001-bank-1",
    "type": "bank_account",
    "status": "completed",
    "result": {
      "account_status": "valid",
      "name_at_bank": "PRIYA NAIR",
      "bank_name": "KOTAK MAHINDRA BANK",
      "branch": "PUNE CAMP",
      "ifsc": "KKBK0005294",
      "account_number_masked": "******7613"
    },
    "charge": { "amount": "2.00", "currency": "INR", "refunded": false },
    "created_at": "2026-09-13T10:04:22.000Z"
  },
  "meta": { "sandbox": false }
}
  • Authenticate with a Bearer key — no session, no browser
  • account_status is valid or invalid, and nothing else
  • No vendor field, message or status code ever reaches you
  • Read a result back by our id, or by your own request_id
  • Check your balance over the API, on a read-only key
What it costs you
HTTPCodeCharged?
200

completed

A definitive answer — the account is valid, or it is not.

Charged
400

INVALID_REQUEST

A field is missing or malformed. Nothing was sent anywhere.

Not charged
402

INSUFFICIENT_BALANCE

Your API wallet cannot cover the call. Refused before spending.

Not charged
409

TYPE_NOT_AVAILABLE

A coming-soon type. Refused, never quietly queued.

Not charged
409

REQUEST_ID_REUSED

That request_id already exists with different input.

Not charged
429

RATE_LIMITED

Too many calls, per key or per organisation.

Not charged
502

VALIDATION_FAILED

We charged, got no answer, and refunded it. Retry with a new request_id.

Refunded
503

SERVICE_BUSY

No provider could be attempted. Refused before charging.

Not charged

Your keys — and the full API reference — live in your dashboard under Settings → Developers. Spending needs a key with write scope, and every change to this API is published in the API changelog.

Sandbox

Build the whole integration before you fund anything

A test key — sk_test_ — runs the same validation, the same idempotency and the same response shape as a live one, flagged as a sandbox call. It never contacts a bank and never touches your balance, so there is nothing to spend and nothing to undo.

  • The same fields, the same errors, the same request_id rules
  • No provider is called and no ledger entry is written
  • The last four digits of the account number pick the outcome
  • Test the refund path without ever losing a rupee

The numbers below are the bank-account type's; every type that opens brings its own documented sandbox inputs. Live calls go to our verification providers, and when none can be attempted we refuse the call with 503 SERVICE_BUSY before taking anything — you are never billed for a call we did not make.

Sandbox test numbers
Account ends inYou get
…0000A valid account, name SANDBOX TEST USER
…1111An invalid account
…2222402 INSUFFICIENT_BALANCE
…5555503 SERVICE_BUSY
…9999502 VALIDATION_FAILED, refunded
anything elseA valid account, name SANDBOX TEST USER

A sandbox response is marked sandbox: true with a simulated charge, so your code can tell the two apart without a second code path.

Buy it on its own

You do not need the rest of SubhX to use this

No HR modules, no employee records, no minimum team size. The Validation Suite stands alone — and if you do run your workplace on SubhX Nexus, it is the same login with its own wallet.

  1. 01

    Create your organisation

    Sign up with an email. Nothing else is required, and you do not have to switch on a single HR module.

  2. 02

    Switch the add-on on

    Enable the Validation Suite from the marketplace. Switching it on is free — you only ever pay per call.

  3. 03

    Mint a sandbox key

    Create an sk_test_ key under Settings → Developers and build against the real response shape.

  4. 04

    Fund the wallet and go live

    Request a top-up in rupees; once approved it lands in your API wallet, and a live key starts drawing on it.

Pricing

A rate per type, and a short list of what we do not charge for

No monthly fee to switch the add-on on, no seat count, no commitment. Every call is chargeable — there is no cheaper mode and no free check. You pay for answers.

Bank account

₹2.00/ validation

LivePrepaid from your API wallet

You send

  • Account number
  • IFSC

UPI (penny drop)

Talk to us

Coming soonPrepaid from your API wallet

You send

  • UPI ID (name@bank)
  • Explicit consent
  • Name to match (optional)

You pay for

  • A definitive answer — valid, or not valid
  • A dashboard run, priced exactly like an API call

You never pay for

  • A lookup we could not get an answer for — refunded automatically
  • A UPI drop that never settles, which answers nothing
  • A malformed request, or a type that is not open yet
  • A retry of a request_id you have already used
  • A call refused because your balance was too low
  • Sandbox calls, and switching the add-on on

These are our published list rates, read live from the validation catalogue — a rate beside a type that is not open yet is what it will cost when it opens, not a promise that you can call it today. Your organisation's effective rate is shown in your dashboard before you run anything, and the rate in force is fixed onto a validation at the moment it is charged. GST applies as per Indian tax law.

Questions

The things people ask before they integrate

  • What can I validate today?+

    Bank accounts: you send an account number and an IFSC, and you get back whether the account is valid, plus the name at the bank, the bank and the branch where the provider returns them. UPI is documented and priced but not callable yet: it takes a UPI ID alone and returns the account number, IFSC, bank and branch and the name at the bank, and until it opens a call to it is refused with 409 TYPE_NOT_AVAILABLE rather than queued. The remaining types in the catalogue — PAN, GST, Aadhaar, IFSC, driving licence, voter ID, passport, mobile and PAN to GSTIN — are coming soon, and calling one is refused the same way rather than half-answered.

  • What does UPI validation need from me?+

    A UPI ID, in the ordinary name@bank form — that is the whole input, and it is the point: no account number and no IFSC. It also needs your explicit assertion that the person consented to the check, because the rails require one and we will not manufacture it on your behalf; the assertion is stored against that call so it can be shown later. You may optionally send a name, which switches on name matching and adds a match score to the answer. It is not callable yet, so nothing can be spent on it today. When it opens, a drop that never settles will be refunded rather than charged — it tells us nothing about the account.

  • What exactly am I charged for?+

    One call, one charge, whenever we give you a definitive answer — and both answers are definitive. A valid account costs ₹2.00, and so does an account that does not exist, is closed, or cannot take credits: you asked a question and we answered it. What you are never charged for: a request we reject as malformed, a call refused because your balance is too low, a coming-soon type, a rate-limited call, and a call where we could not reach an answer at all — that last one is charged and then refunded automatically, so you see both lines in your ledger and end where you started. Retrying the same request_id never charges twice.

  • How much does a validation cost?+

    ₹2.00 per bank-account validation. Every type is priced per call and every call is chargeable — there is no cheaper mode and no free check. That is the published list rate, drawn from your prepaid API wallet; your organisation's effective rate is shown in your dashboard before you run anything. There is no monthly fee to switch the add-on on, no minimum and no contract — an unused wallet simply sits there. GST applies as per Indian tax law.

  • What happens if the lookup fails?+

    You get 502 VALIDATION_FAILED, and the charge is refunded automatically — the response itself tells you so, and the refund is a ledger entry pointing at the debit it reverses. A failed lookup keeps its request_id and keeps returning that same failure, so one id always means one outcome; to try again, send a new request_id.

  • Can I be charged twice for the same call?+

    No. You choose the request_id and it is the idempotency key: send the same one again with the same input and you get the stored result back, with no second charge. Send it with different input and it is refused as 409 REQUEST_ID_REUSED rather than silently overwriting the first outcome. Underneath, a repeated debit is refused by the database itself, not merely by our code.

  • Is there a sandbox?+

    Yes, and it is free. A test key (sk_test_) runs the same validation, the same idempotency and the same response shape, marked as a sandbox call — but it never contacts a bank and never touches your balance. The last four digits of the account number choose the outcome, so you can build and test the failure paths, including the refund, before you fund anything.

  • Do I need the HR product to use this?+

    No. The Validation Suite is standalone: it has its own wallet, its own API keys and no dependence on employee records, so an organisation that wants nothing but the validation API can switch it on and start calling. If you do run your workplace on SubhX Nexus it is the same login and the same organisation — just a separate wallet.

  • Who can create an API key?+

    An organisation admin, and anyone they grant the Manage API keys permission to through a custom role — so the person building the integration does not have to be an admin of your whole organisation. Keys carry a scope, an optional IP allowlist and an expiry, and spending needs a key with write scope: a read-only key can see your balance and your history but cannot run a validation.

  • Will the API change under me?+

    Not its shape. The method, the path, the request, the response and the error codes are our contract, and they do not change when we change, add or fail over between the providers behind them — which vendor answers is deliberately invisible to you. Additions are new optional fields; anything that would break an integration goes to a new version instead, and every change is published in the API changelog.

Start in the sandbox. Fund it when you are convinced.

Create an organisation, switch the add-on on, mint a test key and run the same call you will run in production — including the failure that refunds itself. Nothing to pay until a real answer comes back.