Verifying IBAN - API only (v1)
This is the current stable version of this step type.
Headless bank document verification that extracts funding source data
Verifies a bank document using static evidence collected by your own front end and submitted to IDnow via API, with results delivered as a FundingSource data block.
In Headless mode, your application is responsible for collecting and providing the document image. IDnow performs verification on this static input using automated analysis and data extraction modules. There is no user-facing capture step; all evidence is provided directly by your system.
This step, Verifying proof of address - API only (v1), and Verifying ID document - API only (IDC) (v2) steps each require a different document type and cannot be combined in the same flow.
Key features
- Customer-managed evidence collection: The customer application captures and submits document images via API.
- Funding source extraction: IBAN, BIC, bank code, branch code, bank name, address lines, account number, and account key are extracted from the document.
- Optional identity cross-check: When
compareIdentityis enabled, the document holder's name fields (given name and family name) from a priorBasicIdentitystep are cross-checked against the IBAN document. - Unified Verification data block: A
Verificationresult is produced on all output routes.
Supported countries
IBAN documents are supported for the following countries. Depending on the specific document model, analysis may be fully automated or involve a manual review step.
| Country | ISO code |
|---|---|
| Andorra | AND |
| Austria | AUT |
| Belgium | BEL |
| Bulgaria | BGR |
| Central African Republic | CAF |
| Switzerland | CHE |
| Republic of the Congo | COG |
| Cyprus | CYP |
| Czech Republic | CZE |
| Germany | DEU |
| Denmark | DNK |
| Spain | ESP |
| Estonia | EST |
| Finland | FIN |
| France | FRA |
| United Kingdom | GBR |
| Gibraltar | GIB |
| Greece | GRC |
| Croatia | HRV |
| Hungary | HUN |
| Ireland | IRL |
| Iceland | ISL |
| Italy | ITA |
| Liechtenstein | LIE |
| Lithuania | LTU |
| Luxembourg | LUX |
| Latvia | LVA |
| Monaco | MCO |
| Malta | MLT |
| Netherlands | NLD |
| Norway | NOR |
| Poland | POL |
| Portugal | PRT |
| Romania | ROU |
| San Marino | SMR |
| Slovakia | SVK |
| Slovenia | SVN |
| Sweden | SWE |
| Chad | TCD |
| Vatican City | VAT |
For the full list of supported document models, contact your account manager.
Configuration
| Option | Type | Required | Default | Description |
|---|---|---|---|---|
config | object | Yes | — | Environment-specific configuration. |
config.live.realm | string | Yes | — | The IDCheck.io realm for the IBAN verification service in this environment. Provided by IDnow during onboarding. (live) |
config.staging.realm | string | Yes | — | The IDCheck.io realm for the IBAN verification service in this environment. Provided by IDnow during onboarding. (staging) |
compareIdentity | boolean | No | false | When true, requires a prior BasicIdentity step for identity cross-check. |
Example configuration
{
"config": {
"live": { "realm": "your-live-realm" },
"staging": { "realm": "your-staging-realm" }
}
}
Input data blocks
| Data block | Required | Description |
|---|---|---|
DocumentImages | Yes | Bank document images submitted as binary files via multipart/form-data. Front side is required; back side is optional. Accepted formats: JPEG, PNG. The DocumentImages data block supplied to this step must not come from an identity document capture step. |
BasicIdentity | Conditional | Identity data used for cross-check against the document holder. Present only when compareIdentity is true. |
Each file referenced in DocumentImages is subject to a per-file size limit of 4 MB.
Routes
| Route | Description |
|---|---|
verified | The document was successfully processed and funding source data was extracted. When compareIdentity is enabled, identity data is also extracted for the cross-check. |
not_verified | The document was rejected or analysis flagged the document as invalid. |
fraud_detected | Fraudulent identity suspicion detected. Takes precedence over other failure conditions. |
Output data blocks
| Route | Data blocks produced |
|---|---|
verified | FundingSource, Verificationconditionally: BasicIdentity (only when compareIdentity is true) |
not_verified | Verification |
fraud_detected | Verification |
Example payloads
FundingSource — verified
{
"iban": "FR7630006000011234567890189",
"bic": "BNPAFRPPXXX",
"ibanCountry": "FR",
"accountNumber": "12345678901",
"bankCode": "30006",
"branchCode": "00001",
"bankName": "BNP Paribas",
"bankAddressLines": [
"16 Boulevard des Italiens",
"75009 Paris",
"France"
],
"accountKey": "89"
}
BasicIdentity — verified (when compareIdentity: true)
{
"givenName": "Jean",
"familyName": "Dupont",
"name": "Jean Dupont",
"birthDate": null,
"birthPlace": null
}
This step only produces a BasicIdentity data block — there is no ExtendedIdentity carrier, so
familyNameBirth is not available, even when the document holder uses a usage name (e.g. a
married surname). basicIdentity.familyName already reflects the usage name when one is present,
so use it for identity comparison. Birth-name separation is only provided by identity document
verification steps.
Verification — verified
{
"status": "verified",
"terminationReason": null,
"methods": [
{
"type": "documentCheck",
"checks": [],
"evidence": []
}
],
"provider": "idnow",
"trustFramework": null,
"assuranceLevel": null,
"verifiedAt": "2026-02-10T14:00:01.000Z",
"verificationProcessId": "txn-iban-abc123"
}
Verification — fraud_detected
{
"status": "fraudDetected",
"terminationReason": null,
"methods": [
{
"type": "documentCheck",
"checks": [
{
"technique": "documentValidity",
"sources": [],
"outcome": "failed",
"issues": [
{
"code": "BACKEND_ANALYSIS",
"severity": "error",
"message": "No document found"
}
],
"performedBy": null,
"performedAt": null
}
],
"evidence": [
{
"type": "analysisReport",
"ref": {
"$ref": "vault",
"$id": "6b514db8-55f0-4618-98b5-1e42845d053e"
}
}
]
}
],
"provider": "idnow",
"trustFramework": null,
"assuranceLevel": null,
"verifiedAt": "2026-02-10T14:00:01.000Z",
"verificationProcessId": "txn-iban-abc123"
}
Verification — not_verified (when compareIdentity: true)
{
"status": "rejected",
"terminationReason": null,
"methods": [
{
"type": "documentCheck",
"checks": [
{
"technique": "documentValidity",
"sources": [],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "dataCrosscheck",
"sources": [
{
"type": "ocr",
"id": null
},
{
"type": "inputData",
"id": null
}
],
"outcome": "failed",
"issues": [
{
"code": "FIRSTNAME_LASTNAME_FOUND",
"severity": "error",
"message": "The holder's first and/or last names are not both present"
},
{
"code": "IBAN_FIRST_NAME_MATCH",
"severity": "error",
"message": "IBAN Firstnames do not match the identity"
}
],
"performedBy": null,
"performedAt": null
}
],
"evidence": [
{
"type": "analysisReport",
"ref": {
"$ref": "vault",
"$id": "175ec7bd-aa01-4259-96e0-71d28de0797f"
}
}
]
}
],
"provider": "idnow",
"trustFramework": null,
"assuranceLevel": null,
"verifiedAt": "2026-02-10T14:00:01.000Z",
"verificationProcessId": "txn-iban-abc123"
}