All posts
Integrator6 min read

Odoo Partner Bank Accounts: IBAN Setup, Payment Journals, and Validation

Partner bank accounts in Odoo store the IBAN and account numbers used for vendor payments and customer direct debits. This guide covers account registration, journal assignment, IBAN validation, and the batch payment workflow.

Vendor payments and customer direct debits both require bank account numbers on the partner record. Odoo stores these as res.partner.bank records linked to the partner and validated against IBAN format rules for supported countries.

Adding a Bank Account to a Partner#

Contacts → [Partner] → Accounting tab → Bank Accounts → Add a line

FieldDescription
Account NumberIBAN (validated) or local account number
BankThe bank institution (links to res.bank)
Account HolderUsually the partner; can differ for third-party accounts

Odoo validates IBAN format for SEPA-zone countries (length and modulo-97 checksum). For non-IBAN countries, the field accepts any string.

Company Bank Accounts#

Configure your own company's bank accounts at Accounting → Configuration → Bank Accounts → Add a Bank Account. Each company bank account links to a Bank Journal (account.journal of type Bank). Each journal should have exactly one company bank account.

IBAN Validation#

Invalid IBANs show a warning banner but do not block saving. For SEPA credit transfers, Odoo will refuse to include payments with invalid IBANs at export time.

Assigning Bank Account to Vendor Payment#

When paying a vendor bill via Register Payment, the Recipient Bank Account field shows the vendor's registered bank accounts. Select the correct one; if missing, add it directly from the dialog.

Batch Payments (SEPA Credit Transfer)#

To generate a SEPA XML file:

  1. Create individual payments
  2. Accounting → Vendors → Batch Payments → New
  3. Select SEPA-enabled journal and SEPA Credit Transfer payment method
  4. Add payments and Validate

Odoo generates the XML pain.001 file as an attachment. Requirements: valid company IBAN and BIC; valid recipient IBAN on each payment; SEPA Credit Transfer configured as a payment method on the journal.

Programmatic Access#

python
partner = env['res.partner'].browse(42)
for bank in partner.bank_ids:
    print(bank.acc_number, bank.bank_id.name)

env['res.partner.bank'].create({
    'partner_id': partner.id,
    'acc_number': 'GB29NWBK60161331926819',
    'bank_id': env['res.bank'].search([('bic', '=', 'NWBKGB2L')], limit=1).id,
})

Common Mistakes#

  • Adding IBAN to wrong partner - ensure the IBAN is on the vendor partner, not the company partner
  • Missing BIC on bank - SEPA XML requires a BIC; fill it in on the res.bank record
  • Journal not configured for SEPA - add SEPA Credit Transfer under the journal's Advanced Settings → Payment Methods

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free