Free tools / Bank Statement Reconciler
Convert BAI2 bank files to CSV
Drop a BAI2 file below and see every account and transaction in clean columns, with balances and the file's control totals checked to the cent. The API turns the same result into an Excel-ready CSV.
- Free, no sign-up
- Your file is never stored
- Deterministic: no AI guesswork
Try it now
Your file is read in memory and discarded right after; account numbers are masked unless you switch that off. The fourth sample tab is a BAI2 file with two groups and three accounts, including one where the bank sent detail for only some items.
The live demo needs JavaScript, which seems to be switched off. The sample tabs show the engine's real output without it.
Free: 5 runs a day, no sign-up. Files that cannot be read do not count.
A savings-bank file with ?20 subfields, a direct debit and its return (an RD reversal), and a Latin-1 umlaut in a counterparty name.
sparkasse-style-mt940.sta 837 bytes · MT940
Input file
:20:STARTUMSE
:25:50010517/0648489890
:28C:00012/001
:60F:C260130EUR8420,10
:61:2601300130CR2380,00NTRFNONREF//POS 1
:86:166?00GUTSCHR. UEBERWEISUNG?109310?20EREF+RE-2026-0042?21SVWZ
+Rechnung 2026-0042 vom?22 05.01.2026 Wartungsvertrag?30COBADEFFX
XX?31DE89370400440532013000?32Müller Maschinenbau GmbH
:61:2601300130DR129,90NDDTNONREF//POS 2
:86:105?00FOLGELASTSCHRIFT?109248?20EREF+NT-INV-889123?21MREF+M-0
099-77?22CRED+DE98ZZZ09999999999?23SVWZ+Nordnetz Rechnung Janu?24
ar 2026 Kd-Nr 4455?30DUSSDEDDXXX?31DE65100700000123456789?32Nordn
etz Telekom GmbH
:61:2601300130RD129,90NRTINONREF//POS 3
:86:109?00RUECKLASTSCHRIFT?109248?20EREF+NT-INV-889123?21MREF+M-0
099-77?22CRED+DE98ZZZ09999999999?23SVWZ+Ruecklastschrift?30DUSSDE
DDXXX?31DE65100700000123456789?32Nordnetz Telekom GmbH?34901
:62F:C260130EUR10800,10
-
Audit result
VERIFIED 1 statement · 3 transactions
- STARTUMSE
- VERIFIED
- Opening
- 8420.10
- + Credits
- 2509.90
- − Debits
- 129.90
- = Calculated
- 10800.10
- Bank's closing
- 10800.10 EUR
Transactions
| Date | Amount | Counterparty | Reference | Purpose |
|---|---|---|---|---|
| 2026-01-30 | 2380.00 EUR | Müller Maschinenbau GmbHDE89370400440532013000 | RE-2026-0042 | Rechnung 2026-0042 vom 05.01.2026 Wartungsvertrag |
| 2026-01-30 | -129.90 EUR | Nordnetz Telekom GmbHDE65100700000123456789 | NT-INV-889123 | Nordnetz Rechnung Januar 2026 Kd-Nr 4455 |
| 2026-01-30 | 129.90 EURreversal | Nordnetz Telekom GmbHDE65100700000123456789 | NT-INV-889123 | Ruecklastschrift |
JSON response output_format=json
{
"api_version": "2.0",
"detected_format": "MT940",
"file_count": 1,
"statement_count": 1,
"transaction_count": 3,
"overall_verdict": "VERIFIED",
"verdict_counts": {
"VERIFIED": 1
},
"warnings": [],
"statements": [
{
"statement_index": 0,
"source_file": "sparkasse-style-mt940.sta",
"format": "MT940",
"statement_reference": "STARTUMSE",
"sequence_number": "00012/001",
"account_id": "50010517/0648489890",
"account_servicer_bic": "",
"currency": "EUR",
"creation_datetime": "",
"opening_balance": "8420.10",
"opening_balance_date": "2026-01-30",
"opening_balance_type": "60F",
"closing_balance": "10800.10",
"closing_balance_date": "2026-01-30",
"closing_balance_type": "62F",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "2509.90",
"total_debits": "129.90",
"credit_count": 2,
"debit_count": 1,
"pending_count": 0,
"calculated_closing_balance": "10800.10",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "",
"transaction_count": 3,
"transactions": [
{
"transaction_hash": "6055cc8f87dbc3b7e2dad51b69fe465bd1ae7f72a63665a9f4ba24ec8ac157ca",
"booking_date": "2026-01-30",
"value_date": "2026-01-30",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "2380.00",
"signed_amount": "2380.00",
"currency": "EUR",
"bank_transaction_code": "NTRF",
"bank_transaction_code_proprietary": "",
"gvc": "166",
"booking_text": "GUTSCHR. UEBERWEISUNG",
"bank_reference": "POS 1",
"customer_reference": "NONREF",
"end_to_end_id": "RE-2026-0042",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Müller Maschinenbau GmbH",
"counterparty_iban": "DE89370400440532013000",
"counterparty_bic": "COBADEFFXXX",
"counterparty_account": "DE89370400440532013000",
"purpose": "Rechnung 2026-0042 vom 05.01.2026 Wartungsvertrag",
"return_reason": "",
"raw_information": "166?00GUTSCHR. UEBERWEISUNG?109310?20EREF+RE-2026-0042?21SVWZ\n+Rechnung 2026-0042 vom?22 05.01.2026 Wartungsvertrag?30COBADEFFX\nXX?31DE89370400440532013000?32Müller Maschinenbau GmbH",
"structured_fields": {
"PRIMANOTA": "9310",
"EREF": "RE-2026-0042",
"SVWZ": "Rechnung 2026-0042 vom 05.01.2026 Wartungsvertrag",
"FUNDS_CODE": "R"
},
"batch_details": []
},
{
"transaction_hash": "1015154cfe7ca2bfca28a5f61ef3d97a18ba0553e811427e01310cfaa41b7be5",
"booking_date": "2026-01-30",
"value_date": "2026-01-30",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "129.90",
"signed_amount": "-129.90",
"currency": "EUR",
"bank_transaction_code": "NDDT",
"bank_transaction_code_proprietary": "",
"gvc": "105",
"booking_text": "FOLGELASTSCHRIFT",
"bank_reference": "POS 2",
"customer_reference": "NONREF",
"end_to_end_id": "NT-INV-889123",
"mandate_id": "M-0099-77",
"creditor_id": "DE98ZZZ09999999999",
"counterparty_name": "Nordnetz Telekom GmbH",
"counterparty_iban": "DE65100700000123456789",
"counterparty_bic": "DUSSDEDDXXX",
"counterparty_account": "DE65100700000123456789",
"purpose": "Nordnetz Rechnung Januar 2026 Kd-Nr 4455",
"return_reason": "",
"raw_information": "105?00FOLGELASTSCHRIFT?109248?20EREF+NT-INV-889123?21MREF+M-0\n099-77?22CRED+DE98ZZZ09999999999?23SVWZ+Nordnetz Rechnung Janu?24\nar 2026 Kd-Nr 4455?30DUSSDEDDXXX?31DE65100700000123456789?32Nordn\netz Telekom GmbH",
"structured_fields": {
"PRIMANOTA": "9248",
"EREF": "NT-INV-889123",
"MREF": "M-0099-77",
"CRED": "DE98ZZZ09999999999",
"SVWZ": "Nordnetz Rechnung Januar 2026 Kd-Nr 4455",
"FUNDS_CODE": "R"
},
"batch_details": []
},
{
"transaction_hash": "4c84375ac5d6822d48eb01512a6fa53389d679143821f0a32375deaf196221f4",
"booking_date": "2026-01-30",
"value_date": "2026-01-30",
"direction": "CREDIT",
"is_reversal": true,
"status": "BOOKED",
"amount": "129.90",
"signed_amount": "129.90",
"currency": "EUR",
"bank_transaction_code": "NRTI",
"bank_transaction_code_proprietary": "",
"gvc": "109",
"booking_text": "RUECKLASTSCHRIFT",
"bank_reference": "POS 3",
"customer_reference": "NONREF",
"end_to_end_id": "NT-INV-889123",
"mandate_id": "M-0099-77",
"creditor_id": "DE98ZZZ09999999999",
"counterparty_name": "Nordnetz Telekom GmbH",
"counterparty_iban": "DE65100700000123456789",
"counterparty_bic": "DUSSDEDDXXX",
"counterparty_account": "DE65100700000123456789",
"purpose": "Ruecklastschrift",
"return_reason": "901",
"raw_information": "109?00RUECKLASTSCHRIFT?109248?20EREF+NT-INV-889123?21MREF+M-0\n099-77?22CRED+DE98ZZZ09999999999?23SVWZ+Ruecklastschrift?30DUSSDE\nDDXXX?31DE65100700000123456789?32Nordnetz Telekom GmbH?34901",
"structured_fields": {
"PRIMANOTA": "9248",
"EREF": "NT-INV-889123",
"MREF": "M-0099-77",
"CRED": "DE98ZZZ09999999999",
"SVWZ": "Ruecklastschrift"
},
"batch_details": []
}
]
}
]
}
CSV export output_format=csv
source_file,statement_index,statement_reference,account_id,audit_verdict,transaction_hash,booking_date,value_date,direction,is_reversal,status,amount,signed_amount,currency,counterparty_name,counterparty_iban,counterparty_bic,counterparty_account,purpose,end_to_end_id,mandate_id,creditor_id,bank_transaction_code,bank_transaction_code_proprietary,gvc,booking_text,return_reason,bank_reference,customer_reference
sparkasse-style-mt940.sta,0,STARTUMSE,50010517/0648489890,VERIFIED,6055cc8f87dbc3b7e2dad51b69fe465bd1ae7f72a63665a9f4ba24ec8ac157ca,2026-01-30,2026-01-30,CREDIT,false,BOOKED,2380.00,2380.00,EUR,Müller Maschinenbau GmbH,DE89370400440532013000,COBADEFFXXX,DE89370400440532013000,Rechnung 2026-0042 vom 05.01.2026 Wartungsvertrag,RE-2026-0042,,,NTRF,,166,GUTSCHR. UEBERWEISUNG,,POS 1,NONREF
sparkasse-style-mt940.sta,0,STARTUMSE,50010517/0648489890,VERIFIED,1015154cfe7ca2bfca28a5f61ef3d97a18ba0553e811427e01310cfaa41b7be5,2026-01-30,2026-01-30,DEBIT,false,BOOKED,129.90,-129.90,EUR,Nordnetz Telekom GmbH,DE65100700000123456789,DUSSDEDDXXX,DE65100700000123456789,Nordnetz Rechnung Januar 2026 Kd-Nr 4455,NT-INV-889123,M-0099-77,DE98ZZZ09999999999,NDDT,,105,FOLGELASTSCHRIFT,,POS 2,NONREF
sparkasse-style-mt940.sta,0,STARTUMSE,50010517/0648489890,VERIFIED,4c84375ac5d6822d48eb01512a6fa53389d679143821f0a32375deaf196221f4,2026-01-30,2026-01-30,CREDIT,true,BOOKED,129.90,129.90,EUR,Nordnetz Telekom GmbH,DE65100700000123456789,DUSSDEDDXXX,DE65100700000123456789,Ruecklastschrift,NT-INV-889123,M-0099-77,DE98ZZZ09999999999,NRTI,,109,RUECKLASTSCHRIFT,901,POS 3,NONREF
Three daily statements that each add up, but statement 00006 is missing. The balance chain shows it.
ing-style-mt940-gap.sta 1127 bytes · MT940
Input file
:20:P260105000000001
:25:NL69INGB0123456789EUR
:28C:00004
:60F:C260102EUR12500,00
:61:2601050105C2500,00NTRFNONREF//2601050012345678
:86:/EREF/INV-2026-0012//CNTP/NL44RABO0123456789/RABONL2U/Acme Tr
ading B.V./AMSTERDAM//REMI/USTD//Invoice INV-2026-0012 January ho
sting/
:61:2601050105D189,95NDDTEREF//2601050012345679
:86:/EREF/CH-778899//MARF/MNDT-CH-01//CSID/NL12ZZZ123456780000//C
NTP/IE29AIBK93115212345678/AIBKIE2D/Cloudhost Europe Ltd///REMI/U
STD//Hosting invoice 778899/
:62F:C260105EUR14810,05
:64:C260105EUR14810,05
:20:P260106000000001
:25:NL69INGB0123456789EUR
:28C:00005
:60F:C260105EUR14810,05
:61:2601060106D1000,00NTRFNONREF//2601060099
:86:/EREF/NOTPROVIDED//CNTP/NL91ABNA0417164300/ABNANL2A/J. de Vri
es///REMI/USTD//Freelance design week 1/
:62F:C260106EUR13810,05
:64:C260106EUR13810,05
:20:P260108000000001
:25:NL69INGB0123456789EUR
:28C:00007
:60F:C260107EUR13310,05
:61:2601080108C750,00NTRFNONREF//2601080011
:86:/EREF/INV-2026-0019//CNTP/NL44RABO0123456789/RABONL2U/Acme Tr
ading B.V.///REMI/USTD//Invoice INV-2026-0019/
:62F:C260108EUR14060,05
:64:C260108EUR14060,05
Audit result
DISCREPANCY 3 statements · 4 transactions
BALANCE_CONTINUITY_BREAK Statement 'P260106000000001' closes at 13810.05 on 2026-01-06 but the next statement 'P260108000000001' opens at 13310.05 - a statement may be missing.
- P260105000000001
- VERIFIED
- Opening
- 12500.00
- + Credits
- 2500.00
- − Debits
- 189.95
- = Calculated
- 14810.05
- Bank's closing
- 14810.05 EUR
- P260106000000001
- VERIFIED
- Opening
- 14810.05
- + Credits
- 0.00
- − Debits
- 1000.00
- = Calculated
- 13810.05
- Bank's closing
- 13810.05 EUR
- P260108000000001
- VERIFIED
- Opening
- 13310.05
- + Credits
- 750.00
- − Debits
- 0.00
- = Calculated
- 14060.05
- Bank's closing
- 14060.05 EUR
Transactions
| Date | Amount | Counterparty | Reference | Purpose |
|---|---|---|---|---|
| 2026-01-05 | 2500.00 EUR | Acme Trading B.V.NL44RABO0123456789 | INV-2026-0012 | Invoice INV-2026-0012 January hosting |
| 2026-01-05 | -189.95 EUR | Cloudhost Europe LtdIE29AIBK93115212345678 | CH-778899 | Hosting invoice 778899 |
| 2026-01-06 | -1000.00 EUR | J. de VriesNL91ABNA0417164300 | – | Freelance design week 1 |
| 2026-01-08 | 750.00 EUR | Acme Trading B.V.NL44RABO0123456789 | INV-2026-0019 | Invoice INV-2026-0019 |
JSON response output_format=json
{
"api_version": "2.0",
"detected_format": "MT940",
"file_count": 1,
"statement_count": 3,
"transaction_count": 4,
"overall_verdict": "DISCREPANCY",
"verdict_counts": {
"VERIFIED": 3
},
"warnings": [
{
"type": "BALANCE_CONTINUITY_BREAK",
"account_id": "NL69INGB0123456789",
"message": "Statement 'P260106000000001' closes at 13810.05 on 2026-01-06 but the next statement 'P260108000000001' opens at 13310.05 - a statement may be missing.",
"statement_indexes": [
1,
2
]
}
],
"statements": [
{
"statement_index": 0,
"source_file": "ing-style-mt940-gap.sta",
"format": "MT940",
"statement_reference": "P260105000000001",
"sequence_number": "00004",
"account_id": "NL69INGB0123456789",
"account_servicer_bic": "",
"currency": "EUR",
"creation_datetime": "",
"opening_balance": "12500.00",
"opening_balance_date": "2026-01-02",
"opening_balance_type": "60F",
"closing_balance": "14810.05",
"closing_balance_date": "2026-01-05",
"closing_balance_type": "62F",
"closing_available_balance": "14810.05",
"closing_available_balance_date": "2026-01-05",
"closing_available_balance_type": "64",
"total_credits": "2500.00",
"total_debits": "189.95",
"credit_count": 1,
"debit_count": 1,
"pending_count": 0,
"calculated_closing_balance": "14810.05",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "",
"transaction_count": 2,
"transactions": [
{
"transaction_hash": "61076fadce378a0e422aa63472d2ccf52e655092d532cd4587015ca2b9ec6bf2",
"booking_date": "2026-01-05",
"value_date": "2026-01-05",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "2500.00",
"signed_amount": "2500.00",
"currency": "EUR",
"bank_transaction_code": "NTRF",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "2601050012345678",
"customer_reference": "NONREF",
"end_to_end_id": "INV-2026-0012",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Acme Trading B.V.",
"counterparty_iban": "NL44RABO0123456789",
"counterparty_bic": "RABONL2U",
"counterparty_account": "NL44RABO0123456789",
"purpose": "Invoice INV-2026-0012 January hosting",
"return_reason": "",
"raw_information": "/EREF/INV-2026-0012//CNTP/NL44RABO0123456789/RABONL2U/Acme Tr\nading B.V./AMSTERDAM//REMI/USTD//Invoice INV-2026-0012 January ho\nsting/",
"structured_fields": {
"EREF": "INV-2026-0012",
"CNTP": "NL44RABO0123456789/RABONL2U/Acme Trading B.V./AMSTERDAM",
"REMI": "USTD//Invoice INV-2026-0012 January hosting",
"CNTP_CITY": "AMSTERDAM"
},
"batch_details": []
},
{
"transaction_hash": "4be118e9ddb9d0b155c8617855e416ff414b16a0cccfc478c0142c23fe5d6042",
"booking_date": "2026-01-05",
"value_date": "2026-01-05",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "189.95",
"signed_amount": "-189.95",
"currency": "EUR",
"bank_transaction_code": "NDDT",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "2601050012345679",
"customer_reference": "EREF",
"end_to_end_id": "CH-778899",
"mandate_id": "MNDT-CH-01",
"creditor_id": "NL12ZZZ123456780000",
"counterparty_name": "Cloudhost Europe Ltd",
"counterparty_iban": "IE29AIBK93115212345678",
"counterparty_bic": "AIBKIE2D",
"counterparty_account": "IE29AIBK93115212345678",
"purpose": "Hosting invoice 778899",
"return_reason": "",
"raw_information": "/EREF/CH-778899//MARF/MNDT-CH-01//CSID/NL12ZZZ123456780000//C\nNTP/IE29AIBK93115212345678/AIBKIE2D/Cloudhost Europe Ltd///REMI/U\nSTD//Hosting invoice 778899/",
"structured_fields": {
"EREF": "CH-778899",
"MARF": "MNDT-CH-01",
"CSID": "NL12ZZZ123456780000",
"CNTP": "IE29AIBK93115212345678/AIBKIE2D/Cloudhost Europe Ltd",
"REMI": "USTD//Hosting invoice 778899"
},
"batch_details": []
}
]
},
{
"statement_index": 1,
"source_file": "ing-style-mt940-gap.sta",
"format": "MT940",
"statement_reference": "P260106000000001",
"sequence_number": "00005",
"account_id": "NL69INGB0123456789",
"account_servicer_bic": "",
"currency": "EUR",
"creation_datetime": "",
"opening_balance": "14810.05",
"opening_balance_date": "2026-01-05",
"opening_balance_type": "60F",
"closing_balance": "13810.05",
"closing_balance_date": "2026-01-06",
"closing_balance_type": "62F",
"closing_available_balance": "13810.05",
"closing_available_balance_date": "2026-01-06",
"closing_available_balance_type": "64",
"total_credits": "0.00",
"total_debits": "1000.00",
"credit_count": 0,
"debit_count": 1,
"pending_count": 0,
"calculated_closing_balance": "13810.05",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "",
"transaction_count": 1,
"transactions": [
{
"transaction_hash": "3651b0d97028efbb0e73158862aef4e34ef19559602f27b013f53da98f9fb3e8",
"booking_date": "2026-01-06",
"value_date": "2026-01-06",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "1000.00",
"signed_amount": "-1000.00",
"currency": "EUR",
"bank_transaction_code": "NTRF",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "2601060099",
"customer_reference": "NONREF",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "J. de Vries",
"counterparty_iban": "NL91ABNA0417164300",
"counterparty_bic": "ABNANL2A",
"counterparty_account": "NL91ABNA0417164300",
"purpose": "Freelance design week 1",
"return_reason": "",
"raw_information": "/EREF/NOTPROVIDED//CNTP/NL91ABNA0417164300/ABNANL2A/J. de Vri\nes///REMI/USTD//Freelance design week 1/",
"structured_fields": {
"EREF": "NOTPROVIDED",
"CNTP": "NL91ABNA0417164300/ABNANL2A/J. de Vries",
"REMI": "USTD//Freelance design week 1"
},
"batch_details": []
}
]
},
{
"statement_index": 2,
"source_file": "ing-style-mt940-gap.sta",
"format": "MT940",
"statement_reference": "P260108000000001",
"sequence_number": "00007",
"account_id": "NL69INGB0123456789",
"account_servicer_bic": "",
"currency": "EUR",
"creation_datetime": "",
"opening_balance": "13310.05",
"opening_balance_date": "2026-01-07",
"opening_balance_type": "60F",
"closing_balance": "14060.05",
"closing_balance_date": "2026-01-08",
"closing_balance_type": "62F",
"closing_available_balance": "14060.05",
"closing_available_balance_date": "2026-01-08",
"closing_available_balance_type": "64",
"total_credits": "750.00",
"total_debits": "0.00",
"credit_count": 1,
"debit_count": 0,
"pending_count": 0,
"calculated_closing_balance": "14060.05",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "",
"transaction_count": 1,
"transactions": [
{
"transaction_hash": "8619fac5622b138f294db1d54472a9cd0a37a73046560879fb9a6e5d5424b47d",
"booking_date": "2026-01-08",
"value_date": "2026-01-08",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "750.00",
"signed_amount": "750.00",
"currency": "EUR",
"bank_transaction_code": "NTRF",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "2601080011",
"customer_reference": "NONREF",
"end_to_end_id": "INV-2026-0019",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Acme Trading B.V.",
"counterparty_iban": "NL44RABO0123456789",
"counterparty_bic": "RABONL2U",
"counterparty_account": "NL44RABO0123456789",
"purpose": "Invoice INV-2026-0019",
"return_reason": "",
"raw_information": "/EREF/INV-2026-0019//CNTP/NL44RABO0123456789/RABONL2U/Acme Tr\nading B.V.///REMI/USTD//Invoice INV-2026-0019/",
"structured_fields": {
"EREF": "INV-2026-0019",
"CNTP": "NL44RABO0123456789/RABONL2U/Acme Trading B.V.",
"REMI": "USTD//Invoice INV-2026-0019"
},
"batch_details": []
}
]
}
]
}
CSV export output_format=csv
source_file,statement_index,statement_reference,account_id,audit_verdict,transaction_hash,booking_date,value_date,direction,is_reversal,status,amount,signed_amount,currency,counterparty_name,counterparty_iban,counterparty_bic,counterparty_account,purpose,end_to_end_id,mandate_id,creditor_id,bank_transaction_code,bank_transaction_code_proprietary,gvc,booking_text,return_reason,bank_reference,customer_reference
ing-style-mt940-gap.sta,0,P260105000000001,NL69INGB0123456789,VERIFIED,61076fadce378a0e422aa63472d2ccf52e655092d532cd4587015ca2b9ec6bf2,2026-01-05,2026-01-05,CREDIT,false,BOOKED,2500.00,2500.00,EUR,Acme Trading B.V.,NL44RABO0123456789,RABONL2U,NL44RABO0123456789,Invoice INV-2026-0012 January hosting,INV-2026-0012,,,NTRF,,,,,2601050012345678,NONREF
ing-style-mt940-gap.sta,0,P260105000000001,NL69INGB0123456789,VERIFIED,4be118e9ddb9d0b155c8617855e416ff414b16a0cccfc478c0142c23fe5d6042,2026-01-05,2026-01-05,DEBIT,false,BOOKED,189.95,-189.95,EUR,Cloudhost Europe Ltd,IE29AIBK93115212345678,AIBKIE2D,IE29AIBK93115212345678,Hosting invoice 778899,CH-778899,MNDT-CH-01,NL12ZZZ123456780000,NDDT,,,,,2601050012345679,EREF
ing-style-mt940-gap.sta,1,P260106000000001,NL69INGB0123456789,VERIFIED,3651b0d97028efbb0e73158862aef4e34ef19559602f27b013f53da98f9fb3e8,2026-01-06,2026-01-06,DEBIT,false,BOOKED,1000.00,-1000.00,EUR,J. de Vries,NL91ABNA0417164300,ABNANL2A,NL91ABNA0417164300,Freelance design week 1,,,,NTRF,,,,,2601060099,NONREF
ing-style-mt940-gap.sta,2,P260108000000001,NL69INGB0123456789,VERIFIED,8619fac5622b138f294db1d54472a9cd0a37a73046560879fb9a6e5d5424b47d,2026-01-08,2026-01-08,CREDIT,false,BOOKED,750.00,750.00,EUR,Acme Trading B.V.,NL44RABO0123456789,RABONL2U,NL44RABO0123456789,Invoice INV-2026-0019,INV-2026-0019,,,NTRF,,,,,2601080011,NONREF
An XML statement with a batch booking, a returned payment and a pending entry.
camt053-v02.xml 5808 bytes · CAMT.053
Input file
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>CAMT053-20260228-0001</MsgId>
<CreDtTm>2026-02-28T22:15:00</CreDtTm>
</GrpHdr>
<Stmt>
<Id>2026-02-28-00059</Id>
<ElctrncSeqNb>59</ElctrncSeqNb>
<CreDtTm>2026-02-28T22:15:00</CreDtTm>
<Acct>
<Id><IBAN>DE89370400440532013000</IBAN></Id>
<Ccy>EUR</Ccy>
<Svcr><FinInstnId><BIC>COBADEFFXXX</BIC></FinInstnId></Svcr>
</Acct>
<Bal>
<Tp><CdOrPrtry><Cd>PRCD</Cd></CdOrPrtry></Tp>
<Amt Ccy="EUR">15000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-02-27</Dt></Dt>
</Bal>
<Bal>
<Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp>
<Amt Ccy="EUR">17419.60</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-02-28</Dt></Dt>
</Bal>
<Bal>
<Tp><CdOrPrtry><Cd>CLAV</Cd></CdOrPrtry></Tp>
<Amt Ccy="EUR">17200.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-02-28</Dt></Dt>
</Bal>
<Ntry>
<Amt Ccy="EUR">4200.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt><Dt>2026-02-28</Dt></BookgDt>
<ValDt><Dt>2026-02-28</Dt></ValDt>
<AcctSvcrRef>2026022800001</AcctSvcrRef>
<BkTxCd>
<Domn><Cd>PMNT</Cd><Fmly><Cd>RCDT</Cd><SubFmlyCd>ESCT</SubFmlyCd></Fmly></Domn>
<Prtry><Cd>NTRF+166+931</Cd><Issr>DK</Issr></Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs><EndToEndId>RE-2026-0101</EndToEndId></Refs>
<AmtDtls><TxAmt><Amt Ccy="EUR">4200.00</Amt></TxAmt></AmtDtls>
<RltdPties>
<Dbtr><Nm>Schneider Logistik AG</Nm></Dbtr>
<DbtrAcct><Id><IBAN>DE44500105175407324931</IBAN></Id></DbtrAcct>
</RltdPties>
<RltdAgts><DbtrAgt><FinInstnId><BIC>INGDDEFFXXX</BIC></FinInstnId></DbtrAgt></RltdAgts>
<RmtInf><Ustrd>EREF+RE-2026-0101 SVWZ+Rechnung 2026-0101</Ustrd></RmtInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>GUTSCHR. UEBERWEISUNG</AddtlNtryInf>
</Ntry>
<Ntry>
<Amt Ccy="EUR">1530.40</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt><Dt>2026-02-28</Dt></BookgDt>
<ValDt><Dt>2026-02-28</Dt></ValDt>
<AcctSvcrRef>2026022800002</AcctSvcrRef>
<BkTxCd><Domn><Cd>PMNT</Cd><Fmly><Cd>ICDT</Cd><SubFmlyCd>ESCT</SubFmlyCd></Fmly></Domn></BkTxCd>
<NtryDtls>
<Btch><NbOfTxs>2</NbOfTxs></Btch>
<TxDtls>
<Refs><EndToEndId>PAY-RUN-7-A</EndToEndId></Refs>
<AmtDtls><TxAmt><Amt Ccy="EUR">1000.00</Amt></TxAmt></AmtDtls>
<RltdPties>
<Cdtr><Nm>Lieferant A GmbH</Nm></Cdtr>
<CdtrAcct><Id><IBAN>DE65100700000123456789</IBAN></Id></CdtrAcct>
</RltdPties>
<RmtInf><Ustrd>Rechnung A-55</Ustrd></RmtInf>
</TxDtls>
<TxDtls>
<Refs><EndToEndId>PAY-RUN-7-B</EndToEndId></Refs>
<AmtDtls><TxAmt><Amt Ccy="EUR">530.40</Amt></TxAmt></AmtDtls>
<RltdPties>
<Cdtr><Nm>Lieferant B KG</Nm></Cdtr>
<CdtrAcct><Id><IBAN>DE12500105170648489890</IBAN></Id></CdtrAcct>
</RltdPties>
<RmtInf><Ustrd>Rechnung B-981</Ustrd></RmtInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>SAMMLER-UEBERWEISUNG</AddtlNtryInf>
</Ntry>
<Ntry>
<Amt Ccy="EUR">250.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<RvslInd>true</RvslInd>
<Sts>BOOK</Sts>
<BookgDt><Dt>2026-02-28</Dt></BookgDt>
<ValDt><Dt>2026-02-26</Dt></ValDt>
<BkTxCd><Domn><Cd>PMNT</Cd><Fmly><Cd>RCDT</Cd><SubFmlyCd>RRTN</SubFmlyCd></Fmly></Domn></BkTxCd>
<NtryDtls>
<TxDtls>
<Refs><EndToEndId>RE-2026-0077</EndToEndId></Refs>
<RltdPties>
<Dbtr><Nm>Kunde Falsch GmbH</Nm></Dbtr>
<DbtrAcct><Id><IBAN>NL91ABNA0417164300</IBAN></Id></DbtrAcct>
</RltdPties>
<RmtInf><Ustrd>Rueckueberweisung RE-2026-0077</Ustrd></RmtInf>
<RtrInf><Rsn><Cd>AC04</Cd></Rsn></RtrInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<Amt Ccy="EUR">999.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>PDNG</Sts>
<BookgDt><Dt>2026-03-01</Dt></BookgDt>
<ValDt><Dt>2026-03-01</Dt></ValDt>
<BkTxCd><Domn><Cd>PMNT</Cd><Fmly><Cd>RCDT</Cd><SubFmlyCd>ESCT</SubFmlyCd></Fmly></Domn></BkTxCd>
</Ntry>
</Stmt>
<Stmt>
<Id>2026-02-28-USD-00012</Id>
<Acct>
<Id><Othr><Id>0123456789-USD</Id></Othr></Id>
<Ccy>USD</Ccy>
</Acct>
<Bal>
<Tp><CdOrPrtry><Cd>OPBD</Cd></CdOrPrtry></Tp>
<Amt Ccy="USD">1000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-02-28</Dt></Dt>
</Bal>
<Bal>
<Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp>
<Amt Ccy="USD">1250.25</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-02-28</Dt></Dt>
</Bal>
<Ntry>
<Amt Ccy="USD">250.25</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
Audit result
VERIFIED 2 statements · 5 transactions
- 2026-02-28-00059
- VERIFIED
- Opening
- 15000.00
- + Credits
- 4200.00
- − Debits
- 1780.40
- = Calculated
- 17419.60
- Bank's closing
- 17419.60 EUR
- Note
- 1 pending/informational entries are listed but excluded from the balance check.
- 2026-02-28-USD-00012
- VERIFIED
- Opening
- 1000.00
- + Credits
- 250.25
- − Debits
- 0.00
- = Calculated
- 1250.25
- Bank's closing
- 1250.25 USD
Transactions
| Date | Amount | Counterparty | Reference | Purpose |
|---|---|---|---|---|
| 2026-02-28 | 4200.00 EUR | Schneider Logistik AGDE44500105175407324931 | RE-2026-0101 | Rechnung 2026-0101 |
| 2026-02-28 | -1530.40 EUR | – | – | SAMMLER-UEBERWEISUNG |
| 2026-02-28 | -250.00 EURreversal | Kunde Falsch GmbHNL91ABNA0417164300 | RE-2026-0077 | Rueckueberweisung RE-2026-0077 |
| 2026-03-01 | 999.00 EURpending | – | – | – |
| 2026-02-28 | 250.25 USD | US Client Inc | – | PO 4410 |
JSON response output_format=json
{
"api_version": "2.0",
"detected_format": "CAMT.053",
"file_count": 1,
"statement_count": 2,
"transaction_count": 5,
"overall_verdict": "VERIFIED",
"verdict_counts": {
"VERIFIED": 2
},
"warnings": [],
"statements": [
{
"statement_index": 0,
"source_file": "camt053-v02.xml",
"format": "CAMT.053",
"statement_reference": "2026-02-28-00059",
"sequence_number": "59",
"account_id": "DE89370400440532013000",
"account_servicer_bic": "COBADEFFXXX",
"currency": "EUR",
"creation_datetime": "2026-02-28T22:15:00",
"opening_balance": "15000.00",
"opening_balance_date": "2026-02-27",
"opening_balance_type": "PRCD",
"closing_balance": "17419.60",
"closing_balance_date": "2026-02-28",
"closing_balance_type": "CLBD",
"closing_available_balance": "17200.00",
"closing_available_balance_date": "2026-02-28",
"closing_available_balance_type": "CLAV",
"total_credits": "4200.00",
"total_debits": "1780.40",
"credit_count": 1,
"debit_count": 2,
"pending_count": 1,
"calculated_closing_balance": "17419.60",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [
"1 pending/informational entries are listed but excluded from the balance check."
],
"statement_information": "",
"transaction_count": 4,
"transactions": [
{
"transaction_hash": "edde312f91bf745245338ff7899a850cc9e85d3eb29a02e5f745bdc3cb8247f2",
"booking_date": "2026-02-28",
"value_date": "2026-02-28",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "4200.00",
"signed_amount": "4200.00",
"currency": "EUR",
"bank_transaction_code": "PMNT/RCDT/ESCT",
"bank_transaction_code_proprietary": "NTRF+166+931",
"gvc": "166",
"booking_text": "GUTSCHR. UEBERWEISUNG",
"bank_reference": "2026022800001",
"customer_reference": "",
"end_to_end_id": "RE-2026-0101",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Schneider Logistik AG",
"counterparty_iban": "DE44500105175407324931",
"counterparty_bic": "INGDDEFFXXX",
"counterparty_account": "",
"purpose": "Rechnung 2026-0101",
"return_reason": "",
"raw_information": "GUTSCHR. UEBERWEISUNG",
"structured_fields": {
"EREF": "RE-2026-0101",
"SVWZ": "Rechnung 2026-0101"
},
"batch_details": []
},
{
"transaction_hash": "9fbd582ad36eb1115be52ae3004342f27ecd4f842b97fead3033e8ab247ba909",
"booking_date": "2026-02-28",
"value_date": "2026-02-28",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "1530.40",
"signed_amount": "-1530.40",
"currency": "EUR",
"bank_transaction_code": "PMNT/ICDT/ESCT",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "SAMMLER-UEBERWEISUNG",
"bank_reference": "2026022800002",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "SAMMLER-UEBERWEISUNG",
"return_reason": "",
"raw_information": "SAMMLER-UEBERWEISUNG",
"structured_fields": {},
"batch_details": [
{
"amount": "1000.00",
"end_to_end_id": "PAY-RUN-7-A",
"counterparty_name": "Lieferant A GmbH",
"counterparty_iban": "DE65100700000123456789",
"purpose": "Rechnung A-55"
},
{
"amount": "530.40",
"end_to_end_id": "PAY-RUN-7-B",
"counterparty_name": "Lieferant B KG",
"counterparty_iban": "DE12500105170648489890",
"purpose": "Rechnung B-981"
}
]
},
{
"transaction_hash": "d93b3cfacdcf528df0e4ebcd6f3c9d794ec5f03c0805d23affbcf81b3fd0a229",
"booking_date": "2026-02-28",
"value_date": "2026-02-26",
"direction": "DEBIT",
"is_reversal": true,
"status": "BOOKED",
"amount": "250.00",
"signed_amount": "-250.00",
"currency": "EUR",
"bank_transaction_code": "PMNT/RCDT/RRTN",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "",
"customer_reference": "",
"end_to_end_id": "RE-2026-0077",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Kunde Falsch GmbH",
"counterparty_iban": "NL91ABNA0417164300",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "Rueckueberweisung RE-2026-0077",
"return_reason": "AC04",
"raw_information": "",
"structured_fields": {},
"batch_details": []
},
{
"transaction_hash": "7fa1199ee5bb81530ceba380e14bbb886cf8ef3ae2e86001648ec2b9afecb0c6",
"booking_date": "2026-03-01",
"value_date": "2026-03-01",
"direction": "CREDIT",
"is_reversal": false,
"status": "PENDING",
"amount": "999.00",
"signed_amount": "999.00",
"currency": "EUR",
"bank_transaction_code": "PMNT/RCDT/ESCT",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "",
"return_reason": "",
"raw_information": "",
"structured_fields": {},
"batch_details": []
}
]
},
{
"statement_index": 1,
"source_file": "camt053-v02.xml",
"format": "CAMT.053",
"statement_reference": "2026-02-28-USD-00012",
"sequence_number": "",
"account_id": "0123456789-USD",
"account_servicer_bic": "",
"currency": "USD",
"creation_datetime": "",
"opening_balance": "1000.00",
"opening_balance_date": "2026-02-28",
"opening_balance_type": "OPBD",
"closing_balance": "1250.25",
"closing_balance_date": "2026-02-28",
"closing_balance_type": "CLBD",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "250.25",
"total_debits": "0.00",
"credit_count": 1,
"debit_count": 0,
"pending_count": 0,
"calculated_closing_balance": "1250.25",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "",
"transaction_count": 1,
"transactions": [
{
"transaction_hash": "a056ed22ce64de42f29cb6aa16110185b4141003a2876335ff4954224ebdc7e4",
"booking_date": "2026-02-28",
"value_date": "2026-02-28",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "250.25",
"signed_amount": "250.25",
"currency": "USD",
"bank_transaction_code": "",
"bank_transaction_code_proprietary": "NTRF+166+000",
"gvc": "166",
"booking_text": "",
"bank_reference": "",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "US Client Inc",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "PO 4410",
"return_reason": "",
"raw_information": "",
"structured_fields": {},
"batch_details": []
}
]
}
]
}
CSV export output_format=csv
source_file,statement_index,statement_reference,account_id,audit_verdict,transaction_hash,booking_date,value_date,direction,is_reversal,status,amount,signed_amount,currency,counterparty_name,counterparty_iban,counterparty_bic,counterparty_account,purpose,end_to_end_id,mandate_id,creditor_id,bank_transaction_code,bank_transaction_code_proprietary,gvc,booking_text,return_reason,bank_reference,customer_reference
camt053-v02.xml,0,2026-02-28-00059,DE89370400440532013000,VERIFIED,edde312f91bf745245338ff7899a850cc9e85d3eb29a02e5f745bdc3cb8247f2,2026-02-28,2026-02-28,CREDIT,false,BOOKED,4200.00,4200.00,EUR,Schneider Logistik AG,DE44500105175407324931,INGDDEFFXXX,,Rechnung 2026-0101,RE-2026-0101,,,PMNT/RCDT/ESCT,NTRF+166+931,166,GUTSCHR. UEBERWEISUNG,,2026022800001,
camt053-v02.xml,0,2026-02-28-00059,DE89370400440532013000,VERIFIED,9fbd582ad36eb1115be52ae3004342f27ecd4f842b97fead3033e8ab247ba909,2026-02-28,2026-02-28,DEBIT,false,BOOKED,1530.40,-1530.40,EUR,,,,,SAMMLER-UEBERWEISUNG,,,,PMNT/ICDT/ESCT,,,SAMMLER-UEBERWEISUNG,,2026022800002,
camt053-v02.xml,0,2026-02-28-00059,DE89370400440532013000,VERIFIED,d93b3cfacdcf528df0e4ebcd6f3c9d794ec5f03c0805d23affbcf81b3fd0a229,2026-02-28,2026-02-26,DEBIT,true,BOOKED,250.00,-250.00,EUR,Kunde Falsch GmbH,NL91ABNA0417164300,,,Rueckueberweisung RE-2026-0077,RE-2026-0077,,,PMNT/RCDT/RRTN,,,,AC04,,
camt053-v02.xml,0,2026-02-28-00059,DE89370400440532013000,VERIFIED,7fa1199ee5bb81530ceba380e14bbb886cf8ef3ae2e86001648ec2b9afecb0c6,2026-03-01,2026-03-01,CREDIT,false,PENDING,999.00,999.00,EUR,,,,,,,,,PMNT/RCDT/ESCT,,,,,,
camt053-v02.xml,1,2026-02-28-USD-00012,0123456789-USD,VERIFIED,a056ed22ce64de42f29cb6aa16110185b4141003a2876335ff4954224ebdc7e4,2026-02-28,2026-02-28,CREDIT,false,BOOKED,250.25,250.25,USD,US Client Inc,,,,PO 4410,,,,,NTRF+166+000,166,,,,
Two groups, three accounts in USD and JPY: 88 continuation lines, value-dated funds, and an account where the bank's summary totals cover more than the listed detail.
bai2-two-groups.bai2 960 bytes · BAI2
Input file
01,021000021,CUST001,261019,0615,7,80,,2/
02,CUST001,021000021,1,261018,2400,USD,2/
03,123456789,USD,010,100000000,,,015,125376544,,,045,125000000,,/
88,100,26500000,2,,400,1123456,2,/
16,165,1500000,1,DD1620,INV-2026-104, ACME SUPPLY PAYROLL REFUND
16,195,25000000,V,261019,0900,FW00021,PO-7781/
88,WIRE FROM GLOBEX CORP REF 7781 INVOICE 2026-0042
88,PART 2 OF TEXT
16,475,123456,,BR0042,1001,/
16,451,1000000,0,ACH0099,,UTILITY CO DIRECT DEBIT
16,890,,,,,BALANCE CERTIFICATE ISSUED
49,405623456,10/
03,987654321,JPY,010,5000000,,,015,4900000,,,400,100000,1,/
16,495,100000,0,FT7788,,SUPPLIER PAYMENT JP/
49,10100000,3/
98,415723456,2,15/
02,CUST001,021000021,4,261019,1200,,3/
03,555000111,,010,-250000,,,015,-150000,,,100,600000,3,,400,500000,2,/
16,142,200000,S,100000,50000,50000,ACH1,,PAYROLL RETURN
16,704,75000,,LN1,,LOAN SUBLEDGER ADJUSTMENT
16,960,300000,D,2,0,150000,2,150000,BNK960,,CUSTOM BANK FEE
49,1275000,5/
98,1275000,1,7/
99,416998456,2,24/
Audit result
VERIFIED 3 statements · 8 transactions
UNKNOWN_TYPE_CODE Line 20 (16): type code 704 is not a credit or debit code; the amount 750.00 is listed but left out of the balance check.
UNKNOWN_TYPE_CODE Line 21 (16): type code 960 is not a uniform BAI2 code; treated as a debit by its range.
DETAIL_INCOMPLETE Account 555000111: the bank's total credits are 6000.00, the detail records add up to 2000.00 (difference 4000.00). BAI2 allows banks to send detail for only some items.
DETAIL_INCOMPLETE Account 555000111: the bank's total debits are 5000.00, the detail records add up to 3000.00 (difference 2000.00). BAI2 allows banks to send detail for only some items.
GROUP_STATUS Group 2 has status 'Test only'.
- 7/1/1
- VERIFIED
- Opening
- 1000000.00
- + Credits
- 265000.00
- − Debits
- 11234.56
- = Calculated
- 1253765.44
- Bank's closing
- 1253765.44 USD
- 7/1/2
- VERIFIED
- Opening
- 5000000
- + Credits
- 0
- − Debits
- 100000
- = Calculated
- 4900000
- Bank's closing
- 4900000 JPY
- 7/2/1
- VERIFIED
- Opening
- -2500.00
- + Credits
- 2000.00
- − Debits
- 3000.00
- = Calculated
- -1500.00
- Bank's closing
- -1500.00 USD
- Note
- The detail lines cover only part of the account, so the balances are checked against the bank's own total credits and debits.
- Note
- 1 pending/informational entries are listed but excluded from the balance check.
Transactions
| Date | Amount | Counterparty | Reference | Purpose |
|---|---|---|---|---|
| 2026-10-18 | 15000.00 USD | – | – | ACME SUPPLY PAYROLL REFUND |
| 2026-10-18 | 250000.00 USD | – | – | WIRE FROM GLOBEX CORP REF 7781 INVOICE 2026-0042 PART 2 OF TEXT |
| 2026-10-18 | -1234.56 USD | – | – | – |
| 2026-10-18 | -10000.00 USD | – | – | UTILITY CO DIRECT DEBIT |
| 2026-10-18 | -100000 JPY | – | – | SUPPLIER PAYMENT JP |
| 2026-10-19 | 2000.00 USD | – | – | PAYROLL RETURN |
| 2026-10-19 | 750.00 USDinfo | – | – | LOAN SUBLEDGER ADJUSTMENT |
| 2026-10-19 | -3000.00 USD | – | – | CUSTOM BANK FEE |
JSON response output_format=json
{
"api_version": "2.0",
"detected_format": "BAI2",
"file_count": 1,
"statement_count": 3,
"transaction_count": 8,
"overall_verdict": "VERIFIED",
"verdict_counts": {
"VERIFIED": 3
},
"warnings": [
{
"type": "UNKNOWN_TYPE_CODE",
"account_id": "555000111",
"message": "Line 20 (16): type code 704 is not a credit or debit code; the amount 750.00 is listed but left out of the balance check.",
"statement_indexes": [
2
]
},
{
"type": "UNKNOWN_TYPE_CODE",
"account_id": "555000111",
"message": "Line 21 (16): type code 960 is not a uniform BAI2 code; treated as a debit by its range.",
"statement_indexes": [
2
]
},
{
"type": "DETAIL_INCOMPLETE",
"account_id": "555000111",
"message": "Account 555000111: the bank's total credits are 6000.00, the detail records add up to 2000.00 (difference 4000.00). BAI2 allows banks to send detail for only some items.",
"statement_indexes": [
2
]
},
{
"type": "DETAIL_INCOMPLETE",
"account_id": "555000111",
"message": "Account 555000111: the bank's total debits are 5000.00, the detail records add up to 3000.00 (difference 2000.00). BAI2 allows banks to send detail for only some items.",
"statement_indexes": [
2
]
},
{
"type": "GROUP_STATUS",
"account_id": "555000111",
"message": "Group 2 has status 'Test only'.",
"statement_indexes": [
2
]
}
],
"statements": [
{
"statement_index": 0,
"source_file": "bai2-two-groups.bai2",
"format": "BAI2",
"statement_reference": "7/1/1",
"sequence_number": "7",
"account_id": "123456789",
"account_servicer_bic": "",
"currency": "USD",
"creation_datetime": "2026-10-19T06:15",
"opening_balance": "1000000.00",
"opening_balance_date": "2026-10-18",
"opening_balance_type": "010",
"closing_balance": "1253765.44",
"closing_balance_date": "2026-10-18",
"closing_balance_type": "015",
"closing_available_balance": "1250000.00",
"closing_available_balance_date": "2026-10-18",
"closing_available_balance_type": "045",
"total_credits": "265000.00",
"total_debits": "11234.56",
"credit_count": 2,
"debit_count": 2,
"pending_count": 0,
"calculated_closing_balance": "1253765.44",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "Originator 021000021; Group status: Update; Final previous-day; BALANCE CERTIFICATE ISSUED",
"transaction_count": 4,
"transactions": [
{
"transaction_hash": "fd7f1e658502ee61ad962ae2bf350c3c97ac60c62e9090fb8e24cc968f3352cd",
"booking_date": "2026-10-18",
"value_date": "2026-10-18",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "15000.00",
"signed_amount": "15000.00",
"currency": "USD",
"bank_transaction_code": "165",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Preauthorized ACH Credit",
"bank_reference": "DD1620",
"customer_reference": "INV-2026-104",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "ACME SUPPLY PAYROLL REFUND",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "1"
},
"batch_details": []
},
{
"transaction_hash": "b8874591363b67e5b48223efbec8ecbac26d5115843e0d89c512ade0f1b00c57",
"booking_date": "2026-10-18",
"value_date": "2026-10-19",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "250000.00",
"signed_amount": "250000.00",
"currency": "USD",
"bank_transaction_code": "195",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Incoming Money Transfer",
"bank_reference": "FW00021",
"customer_reference": "PO-7781",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "WIRE FROM GLOBEX CORP REF 7781 INVOICE 2026-0042 PART 2 OF TEXT",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "V",
"VALUE_TIME": "0900"
},
"batch_details": []
},
{
"transaction_hash": "4d58bd2a3fbf4b5692f94fdb7dc8f3653e4d8eb4c5812a2445742b9fb246a5e6",
"booking_date": "2026-10-18",
"value_date": "2026-10-18",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "1234.56",
"signed_amount": "-1234.56",
"currency": "USD",
"bank_transaction_code": "475",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Check Paid",
"bank_reference": "BR0042",
"customer_reference": "1001",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"CHECK_NUMBER": "1001"
},
"batch_details": []
},
{
"transaction_hash": "4fb932b03d2b119a010a6b927a79192eaab6a72933481dc6d96bf6534c36cf5e",
"booking_date": "2026-10-18",
"value_date": "2026-10-18",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "10000.00",
"signed_amount": "-10000.00",
"currency": "USD",
"bank_transaction_code": "451",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "ACH Debit Received",
"bank_reference": "ACH0099",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "UTILITY CO DIRECT DEBIT",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "0"
},
"batch_details": []
}
]
},
{
"statement_index": 1,
"source_file": "bai2-two-groups.bai2",
"format": "BAI2",
"statement_reference": "7/1/2",
"sequence_number": "7",
"account_id": "987654321",
"account_servicer_bic": "",
"currency": "JPY",
"creation_datetime": "2026-10-19T06:15",
"opening_balance": "5000000",
"opening_balance_date": "2026-10-18",
"opening_balance_type": "010",
"closing_balance": "4900000",
"closing_balance_date": "2026-10-18",
"closing_balance_type": "015",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "0",
"total_debits": "100000",
"credit_count": 0,
"debit_count": 1,
"pending_count": 0,
"calculated_closing_balance": "4900000",
"discrepancy_amount": "0",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "Originator 021000021; Group status: Update; Final previous-day",
"transaction_count": 1,
"transactions": [
{
"transaction_hash": "2bc8fdbacc80425a58b839c5040e79f7c7d2ecd29699abe4716340d1811f916e",
"booking_date": "2026-10-18",
"value_date": "2026-10-18",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "100000",
"signed_amount": "-100000",
"currency": "JPY",
"bank_transaction_code": "495",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Outgoing Money Transfer",
"bank_reference": "FT7788",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "SUPPLIER PAYMENT JP",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "0"
},
"batch_details": []
}
]
},
{
"statement_index": 2,
"source_file": "bai2-two-groups.bai2",
"format": "BAI2",
"statement_reference": "7/2/1",
"sequence_number": "7",
"account_id": "555000111",
"account_servicer_bic": "",
"currency": "USD",
"creation_datetime": "2026-10-19T06:15",
"opening_balance": "-2500.00",
"opening_balance_date": "2026-10-19",
"opening_balance_type": "010",
"closing_balance": "-1500.00",
"closing_balance_date": "2026-10-19",
"closing_balance_type": "015",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "2000.00",
"total_debits": "3000.00",
"credit_count": 1,
"debit_count": 1,
"pending_count": 1,
"calculated_closing_balance": "-1500.00",
"discrepancy_amount": "0.00",
"audit_method": "SUMMARY_TOTALS",
"audit_verdict": "VERIFIED",
"audit_notes": [
"1 pending/informational entries are listed but excluded from the balance check."
],
"statement_information": "Originator 021000021; Group status: Test only; Interim same-day",
"transaction_count": 3,
"transactions": [
{
"transaction_hash": "550457beb05524541070af41f66f3121216efa786019a756af6a87639900d8b6",
"booking_date": "2026-10-19",
"value_date": "2026-10-19",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "2000.00",
"signed_amount": "2000.00",
"currency": "USD",
"bank_transaction_code": "142",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "ACH Credit Received",
"bank_reference": "ACH1",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "PAYROLL RETURN",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "S"
},
"batch_details": []
},
{
"transaction_hash": "1e6abea31248ac829c2c2649253741ba7f525cb9bbcde893cf89635650ebccf9",
"booking_date": "2026-10-19",
"value_date": "2026-10-19",
"direction": "CREDIT",
"is_reversal": false,
"status": "INFO",
"amount": "750.00",
"signed_amount": "750.00",
"currency": "USD",
"bank_transaction_code": "704",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "LN1",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "LOAN SUBLEDGER ADJUSTMENT",
"return_reason": "",
"raw_information": "",
"structured_fields": {},
"batch_details": []
},
{
"transaction_hash": "d11b17894ada1a95c5bebe6fc46611ec14ae82f4f6d2b2c077ba9a3a86d61b01",
"booking_date": "2026-10-19",
"value_date": "2026-10-19",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "3000.00",
"signed_amount": "-3000.00",
"currency": "USD",
"bank_transaction_code": "960",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "",
"bank_reference": "BNK960",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "CUSTOM BANK FEE",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"FUNDS_TYPE": "D"
},
"batch_details": []
}
]
}
]
}
CSV export output_format=csv
source_file,statement_index,statement_reference,account_id,audit_verdict,transaction_hash,booking_date,value_date,direction,is_reversal,status,amount,signed_amount,currency,counterparty_name,counterparty_iban,counterparty_bic,counterparty_account,purpose,end_to_end_id,mandate_id,creditor_id,bank_transaction_code,bank_transaction_code_proprietary,gvc,booking_text,return_reason,bank_reference,customer_reference
bai2-two-groups.bai2,0,7/1/1,123456789,VERIFIED,fd7f1e658502ee61ad962ae2bf350c3c97ac60c62e9090fb8e24cc968f3352cd,2026-10-18,2026-10-18,CREDIT,false,BOOKED,15000.00,15000.00,USD,,,,,ACME SUPPLY PAYROLL REFUND,,,,165,,,Preauthorized ACH Credit,,DD1620,INV-2026-104
bai2-two-groups.bai2,0,7/1/1,123456789,VERIFIED,b8874591363b67e5b48223efbec8ecbac26d5115843e0d89c512ade0f1b00c57,2026-10-18,2026-10-19,CREDIT,false,BOOKED,250000.00,250000.00,USD,,,,,WIRE FROM GLOBEX CORP REF 7781 INVOICE 2026-0042 PART 2 OF TEXT,,,,195,,,Incoming Money Transfer,,FW00021,PO-7781
bai2-two-groups.bai2,0,7/1/1,123456789,VERIFIED,4d58bd2a3fbf4b5692f94fdb7dc8f3653e4d8eb4c5812a2445742b9fb246a5e6,2026-10-18,2026-10-18,DEBIT,false,BOOKED,1234.56,-1234.56,USD,,,,,,,,,475,,,Check Paid,,BR0042,1001
bai2-two-groups.bai2,0,7/1/1,123456789,VERIFIED,4fb932b03d2b119a010a6b927a79192eaab6a72933481dc6d96bf6534c36cf5e,2026-10-18,2026-10-18,DEBIT,false,BOOKED,10000.00,-10000.00,USD,,,,,UTILITY CO DIRECT DEBIT,,,,451,,,ACH Debit Received,,ACH0099,
bai2-two-groups.bai2,1,7/1/2,987654321,VERIFIED,2bc8fdbacc80425a58b839c5040e79f7c7d2ecd29699abe4716340d1811f916e,2026-10-18,2026-10-18,DEBIT,false,BOOKED,100000,-100000,JPY,,,,,SUPPLIER PAYMENT JP,,,,495,,,Outgoing Money Transfer,,FT7788,
bai2-two-groups.bai2,2,7/2/1,555000111,VERIFIED,550457beb05524541070af41f66f3121216efa786019a756af6a87639900d8b6,2026-10-19,2026-10-19,CREDIT,false,BOOKED,2000.00,2000.00,USD,,,,,PAYROLL RETURN,,,,142,,,ACH Credit Received,,ACH1,
bai2-two-groups.bai2,2,7/2/1,555000111,VERIFIED,1e6abea31248ac829c2c2649253741ba7f525cb9bbcde893cf89635650ebccf9,2026-10-19,2026-10-19,CREDIT,false,INFO,750.00,750.00,USD,,,,,LOAN SUBLEDGER ADJUSTMENT,,,,704,,,,,LN1,
bai2-two-groups.bai2,2,7/2/1,555000111,VERIFIED,d11b17894ada1a95c5bebe6fc46611ec14ae82f4f6d2b2c077ba9a3a86d61b01,2026-10-19,2026-10-19,DEBIT,false,BOOKED,3000.00,-3000.00,USD,,,,,CUSTOM BANK FEE,,,,960,,,,,BNK960,
A CODA 2.6 file with two accounts: a structured +++ communication, a SEPA direct debit, a globalised supplier batch and a free-text information record.
coda-be-two-accounts.cod 2600 bytes · CODA
Input file
0000020102630005 REF0000001ACME NV GEBABEBB 00123456789 00000 2
12012BE68539007547034 EUR0000001000000000191026ACME NV Current account 012
2100010000BANKREF0001 0000000001250500201026001500001101090933755493 20102601201 1
2200010000 E2E-INV-1001 KREDBEBB 1 1
2300010000BE71096123456769 Café Liégeois SA 0 1
3100010001BANKREF0001 001500001001Café Liégeois SA 1 0
3200010001Rue de la Loi 1 1000 Bruxelles 0 0
2100020000BANKREF0001 1000000000045670201026005010501127201026110BE12ZZZ0123456789 MANDAT20102601201 0
2200020000E-77 Invoice 2026-10 electricE2E-DD-77 2AM04 1 0
2300020000 ity 2AM040 0
2100030000BANKREF0003 1000000000300000201026101010000Supplier batch 20102601210 0
2100030001BANKREF0003 1000000000100000201026501010000Supplier A invoice 1 20102601200 0
2100030002BANKREF0003 1000000000200000201026501010000Supplier B invoice 7 20102601201 0
2300030002NL91ABNA0417164300 Supplier B BV 0 0
8012BE68539007547034 EUR0000001000904830201026 1
4 00010000 Thank you for banking with us. Fees change on 1 January. 0
9 000014000000000345670000000001250500 1
0000020102630005 REF0000001ACME NV GEBABEBB 00123456789 00000 2
10044539007547034 EUR 1000000002500000151026ACME NV Credit line 044
9 000001000000000000000000000000000000 2
Audit result
VERIFIED 2 statements · 3 transactions
- 012/REF0000001
- VERIFIED
- Opening
- 1000000.00
- + Credits
- 1250.50
- − Debits
- 345.67
- = Calculated
- 1000904.83
- Bank's closing
- 1000904.83 EUR
- 044/REF0000001
- VERIFIED
- Opening
- -2500.00
- + Credits
- 0.00
- − Debits
- 0.00
- = Calculated
- -2500.00
- Bank's closing
- -2500.00 EUR
Transactions
| Date | Amount | Counterparty | Reference | Purpose |
|---|---|---|---|---|
| 2026-10-20 | 1250.50 EUR | Café Liégeois SABE71096123456769 | E2E-INV-1001 | +++090/9337/55493+++ |
| 2026-10-20 | -45.67 EUR | – | E2E-DD-77 | Invoice 2026-10 electricity |
| 2026-10-20 | -300.00 EUR | – | – | Supplier batch |
JSON response output_format=json
{
"api_version": "2.0",
"detected_format": "CODA",
"file_count": 1,
"statement_count": 2,
"transaction_count": 3,
"overall_verdict": "VERIFIED",
"verdict_counts": {
"VERIFIED": 2
},
"warnings": [],
"statements": [
{
"statement_index": 0,
"source_file": "coda-be-two-accounts.cod",
"format": "CODA",
"statement_reference": "012/REF0000001",
"sequence_number": "012",
"account_id": "BE68539007547034",
"account_servicer_bic": "GEBABEBB",
"currency": "EUR",
"creation_datetime": "2026-10-20",
"opening_balance": "1000000.00",
"opening_balance_date": "2026-10-19",
"opening_balance_type": "OLD_BALANCE",
"closing_balance": "1000904.83",
"closing_balance_date": "2026-10-20",
"closing_balance_type": "NEW_BALANCE",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "1250.50",
"total_debits": "345.67",
"credit_count": 1,
"debit_count": 2,
"pending_count": 0,
"calculated_closing_balance": "1000904.83",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "Current account; Thank you for banking with us. Fees change on 1 January.",
"transaction_count": 3,
"transactions": [
{
"transaction_hash": "69b608e767c2d3218311c5d4fff8373fac75bb81154b3c26de2f910181cc7739",
"booking_date": "2026-10-20",
"value_date": "2026-10-20",
"direction": "CREDIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "1250.50",
"signed_amount": "1250.50",
"currency": "EUR",
"bank_transaction_code": "00150000",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Domestic or local SEPA credit transfer",
"bank_reference": "BANKREF0001",
"customer_reference": "E2E-INV-1001",
"end_to_end_id": "E2E-INV-1001",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "Café Liégeois SA",
"counterparty_iban": "BE71096123456769",
"counterparty_bic": "KREDBEBB",
"counterparty_account": "",
"purpose": "+++090/9337/55493+++",
"return_reason": "",
"raw_information": "",
"structured_fields": {
"STRUCTURED_COMMUNICATION_TYPE": "101",
"STRUCTURED_REFERENCE": "+++090/9337/55493+++",
"CNTP": "Café Liégeois SA",
"CNTP_ADDRESS": "Rue de la Loi 1 1000 Bruxelles"
},
"batch_details": []
},
{
"transaction_hash": "f8c5d47bf557323f69444ee4ec6001664d1f77b015bd6a803bc183e4f60ec87e",
"booking_date": "2026-10-20",
"value_date": "2026-10-20",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "45.67",
"signed_amount": "-45.67",
"currency": "EUR",
"bank_transaction_code": "00501050",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Direct debit",
"bank_reference": "BANKREF0001",
"customer_reference": "E2E-DD-77",
"end_to_end_id": "E2E-DD-77",
"mandate_id": "MANDATE-77",
"creditor_id": "BE12ZZZ0123456789",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "Invoice 2026-10 electricity",
"return_reason": "AM04",
"raw_information": "",
"structured_fields": {
"R_TRANSACTION": "Return",
"STRUCTURED_COMMUNICATION_TYPE": "127",
"SETTLEMENT_DATE": "2026-10-20",
"DIRECT_DEBIT_TYPE": "Recurrent",
"DIRECT_DEBIT_SCHEME": "SEPA Core"
},
"batch_details": []
},
{
"transaction_hash": "2c95a80d86cbc5c16a366a2665d592b5e87bb4963b6760457ce64d3cb675be9c",
"booking_date": "2026-10-20",
"value_date": "2026-10-20",
"direction": "DEBIT",
"is_reversal": false,
"status": "BOOKED",
"amount": "300.00",
"signed_amount": "-300.00",
"currency": "EUR",
"bank_transaction_code": "10101000",
"bank_transaction_code_proprietary": "",
"gvc": "",
"booking_text": "Domestic or local SEPA credit transfer (total by customer)",
"bank_reference": "BANKREF0003",
"customer_reference": "",
"end_to_end_id": "",
"mandate_id": "",
"creditor_id": "",
"counterparty_name": "",
"counterparty_iban": "",
"counterparty_bic": "",
"counterparty_account": "",
"purpose": "Supplier batch",
"return_reason": "",
"raw_information": "",
"structured_fields": {},
"batch_details": [
{
"detail_number": "0001",
"amount": "100.00",
"direction": "DEBIT",
"bank_transaction_code": "50101000",
"bank_reference": "BANKREF0003",
"purpose": "Supplier A invoice 1"
},
{
"detail_number": "0002",
"amount": "200.00",
"direction": "DEBIT",
"bank_transaction_code": "50101000",
"bank_reference": "BANKREF0003",
"counterparty_name": "Supplier B BV",
"counterparty_iban": "NL91ABNA0417164300",
"purpose": "Supplier B invoice 7"
}
]
}
]
},
{
"statement_index": 1,
"source_file": "coda-be-two-accounts.cod",
"format": "CODA",
"statement_reference": "044/REF0000001",
"sequence_number": "044",
"account_id": "539007547034",
"account_servicer_bic": "GEBABEBB",
"currency": "EUR",
"creation_datetime": "2026-10-20",
"opening_balance": "-2500.00",
"opening_balance_date": "2026-10-15",
"opening_balance_type": "OLD_BALANCE",
"closing_balance": "-2500.00",
"closing_balance_date": "2026-10-15",
"closing_balance_type": "NO_MOVEMENT",
"closing_available_balance": null,
"closing_available_balance_date": null,
"closing_available_balance_type": null,
"total_credits": "0.00",
"total_debits": "0.00",
"credit_count": 0,
"debit_count": 0,
"pending_count": 0,
"calculated_closing_balance": "-2500.00",
"discrepancy_amount": "0.00",
"audit_method": "BALANCE_EQUATION",
"audit_verdict": "VERIFIED",
"audit_notes": [],
"statement_information": "Credit line; Empty file: no movements",
"transaction_count": 0,
"transactions": []
}
]
}
CSV export output_format=csv
source_file,statement_index,statement_reference,account_id,audit_verdict,transaction_hash,booking_date,value_date,direction,is_reversal,status,amount,signed_amount,currency,counterparty_name,counterparty_iban,counterparty_bic,counterparty_account,purpose,end_to_end_id,mandate_id,creditor_id,bank_transaction_code,bank_transaction_code_proprietary,gvc,booking_text,return_reason,bank_reference,customer_reference
coda-be-two-accounts.cod,0,012/REF0000001,BE68539007547034,VERIFIED,69b608e767c2d3218311c5d4fff8373fac75bb81154b3c26de2f910181cc7739,2026-10-20,2026-10-20,CREDIT,false,BOOKED,1250.50,1250.50,EUR,Café Liégeois SA,BE71096123456769,KREDBEBB,,'+++090/9337/55493+++,E2E-INV-1001,,,00150000,,,Domestic or local SEPA credit transfer,,BANKREF0001,E2E-INV-1001
coda-be-two-accounts.cod,0,012/REF0000001,BE68539007547034,VERIFIED,f8c5d47bf557323f69444ee4ec6001664d1f77b015bd6a803bc183e4f60ec87e,2026-10-20,2026-10-20,DEBIT,false,BOOKED,45.67,-45.67,EUR,,,,,Invoice 2026-10 electricity,E2E-DD-77,MANDATE-77,BE12ZZZ0123456789,00501050,,,Direct debit,AM04,BANKREF0001,E2E-DD-77
coda-be-two-accounts.cod,0,012/REF0000001,BE68539007547034,VERIFIED,2c95a80d86cbc5c16a366a2665d592b5e87bb4963b6760457ce64d3cb675be9c,2026-10-20,2026-10-20,DEBIT,false,BOOKED,300.00,-300.00,EUR,,,,,Supplier batch,,,,10101000,,,Domestic or local SEPA credit transfer (total by customer),,BANKREF0003,
How it works
- Download the report from your bank’s cash management or treasury portal as BAI2 (also called BAI, BAI 2 or Cash Management Balance Reporting). The file usually ends in
.bai,.bai2or.txt. - Drop it into the box above. The live demo shows the audit for every account and the first 25 transactions.
- For the CSV itself, every transaction and whole archives, the API returns
output_format=csv, or JSON, hledger, Beancount and camt.053.
How BAI2 files are read
The CSV has one row per transaction, with the same 29 columns as for every other format. For BAI2 these are filled:
| Column | Example |
|---|---|
account_id, currency |
123456789, USD |
booking_date, value_date |
2026-10-18; the value date follows the funds type, for example a value-dated item |
signed_amount |
250000.00 or -1234.56, decimals placed by currency |
bank_transaction_code, booking_text |
195, Incoming Money Transfer (the name from the BAI2 type code table) |
bank_reference, customer_reference |
the bank’s and your own reference from the 16 record |
purpose |
the transaction text, with its 88 continuation lines joined |
audit_verdict |
VERIFIED, DISCREPANCY or UNVERIFIABLE for the account the row belongs to |
transaction_hash |
a stable ID, so importing the same file twice does not create duplicates |
BAI2 has no separate fields for the counterparty’s name or account, so the bank’s text stays in purpose.
Type codes without a defined direction (unassigned codes, for example) are listed with status INFO, left out of
the balance check and reported as a warning. Same-day reports are not chained with the previous day’s report.
The parser follows the BAI2 specification and reproduces every control total of its Appendix D sample. It is independent and not affiliated with any bank or with the publisher of the standard.
Questions
What is a BAI2 file?
BAI2 (Cash Management Balance Reporting, Version 2) is the format US banks use for previous-day and same-day account reports. It is a text file of comma-separated records: 01 file header, 02 group, 03 account with its balances and totals, 16 one transaction, 88 a continuation line, and 49, 98, 99 trailers with control totals.
Why not open the BAI2 file in Excel directly?
Excel splits the records at the commas, but every record type has different columns, amounts have no decimal point, transactions are identified by a three-digit type code, and long texts continue on 88 lines. The converter joins those lines, places the decimal point by currency (none for JPY) and names each type code, such as 195 Incoming Money Transfer.
What does the balance check do with BAI2?
For each account, opening balance + credits − debits must equal the closing balance, to the cent. The 49, 98 and 99 trailers are checked as well: if their control totals or record counts do not match the file, the statement is marked DISCREPANCY.
My bank lists only some transactions. Is that a discrepancy?
Not by itself. BAI2 lets a bank send detail for only some items. When the account record carries the bank’s total credits and debits (type codes 100 and 400), the balances are checked against those totals and the missing detail is reported as a DETAIL_INCOMPLETE warning.
Is my bank file stored?
No. The demo service reads the file in memory, sends the result back to your browser and discards the file. Nothing is written to disk. In the demo, account numbers are masked by default. BAI2 has no separate name field, so names inside the bank’s transaction text are shown as sent.
Can I convert many files at once?
The API accepts a ZIP of files and returns one CSV for all of them. The free demo takes one file up to 2 MB, shows the first 25 transactions and allows 5 runs a day.
Need it in your own software?
The same engine is available as an API: whole files instead of a preview, every export format, automation.
Related tools
MT940 to CSV converter
Turn an MT940 or MT942 file into clean columns for Excel, with every balance checked to the cent.
camt.053 to Excel converter
Read ISO 20022 camt.053 (and camt.052 / 054) XML statements as clean rows, balances checked.
Bank statement balance check
Prove that an MT940 or camt.053 statement adds up, and find statements missing from a series.