Working with reimbursements
When someone pays for a business expense from their own pocket, Payhawk records it as a reimbursement — an expense paid back to the person rather than charged to a corporate card. For that to work end-to-end, Payhawk needs to know who your reimbursable people are and how to pay them. The Payhawk × Odoo connector syncs that directory for you.
Pick: Users or Employees
In Odoo there are two related models that can stand for "a person":
| Odoo model | What it is |
|---|---|
res.users | A user who can log into Odoo |
hr.employee | An employee on the payroll, with HR fields (manager, bank account, contract…) |
They are usually the same people but not always. A contractor might be an employee without a login. An external accountant might be a user without being on payroll.
In Settings → Payhawk, the Reimbursement subjects option picks which model gets synced to Payhawk:
| Option | Sync source | When to pick it |
|---|---|---|
| Users | Every active res.users record | You don't use the HR app; reimbursable people log into Odoo |
| Employees | Every active hr.employee record | You use the HR app (Pro tier and up); payroll bank accounts live on the employee record |
Pick Employees if HR is installed — the bank-account-number field is on the employee record, and that's where finance teams keep payroll banking details. Pick Users only if HR isn't installed.
Where the bank account comes from
The payout uses the bank account number stored on the synced record:
| Mapping | Bank account read from |
|---|---|
| Users | res.users.partner_id.bank_ids (the user's contact has a related bank account) |
| Employees | hr.employee.bank_account_id — the Private Information tab on the employee form |
Bank account must be set before sync
An employee with no bank account number syncs to Payhawk just fine, but the reimbursement payout step in Payhawk will have no destination IBAN. Populate the field on the Odoo side first, then sync.
How it flows
Person in your company submits a reimbursable expense in Payhawk
│
▼
Reviewer approves → Payhawk knows who, how much, which IBAN
(IBAN already synced from Odoo)
│
▼
Payhawk schedules the payout to the employee's IBAN
│
▼
Expense posts back to Odoo as a vendor bill (or receipt) against
the employee's partner record — not against an external vendorThe person shows up in Payhawk's picker on every reimbursement, with their name, role, and IBAN already attached. No retyping per expense.
Initial sync
After changing Reimbursement subjects:
- Settings → Payhawk → Sync now (full sync) — or specifically Sync Employees / Sync Users depending on which mapping you chose
- Wait ~30 seconds
- In Payhawk → Settings → People — confirm the list matches what you'd expect from your Odoo data
The scheduled sync (every 15 minutes) keeps things current after that. New employees in Odoo appear in Payhawk on the next sync; archived employees are deactivated in Payhawk.
Payhawk login is separate
A person synced to Payhawk is a record in Payhawk's directory — it does not automatically give them a Payhawk login. Whether they can sign in to Payhawk and submit their own reimbursements is a separate choice in Payhawk → Settings → People → invite-by-email.
This is intentional: the reimbursement payout still works for any synced person regardless of whether they have Payhawk login access. A submitter who isn't a Payhawk user has their expense entered by a reviewer on their behalf.
Common gotchas
| Issue | Fix |
|---|---|
| Reimbursement appears in Payhawk but IBAN is blank | The Odoo record has no bank_account_id (or partner_id.bank_ids for User mapping). Fill it, then re-sync. |
| Employees missing from Payhawk after sync | They are archived or not marked Active in Odoo — Payhawk syncs active records only |
| User mapping picks the company bank account, not the personal one | On the user's partner record, ensure the personal bank account is set; remove or unmark the company account on that partner |
| Names in Payhawk don't match | The sync uses hr.employee.name (or res.users.name) verbatim. Update in Odoo and force a sync. |
Switching mappings after going live
Changing from Users → Employees (or back) is supported but disruptive:
- Records under the old mapping are archived in Payhawk on the next sync
- Records under the new mapping appear
- Open reimbursements assigned to old records do not move automatically — settle them under the old mapping first, or expect a manual cleanup
Best to pick the right mapping at setup and stick with it. If you must switch, schedule a maintenance window with the Payhawk reviewers.
Where to read more
- Configuration — the full settings reference
- Sync options — every toggle on the Miscellaneous tab
- Bills vs receipts — the related Document Type setup
- PLANA Business Cloud → Employees — where bank accounts live in the HR app