Setting up Bexio: OAuth, contacts and invoices
The Bexio integration pushes customers and invoices from i-Reserve to Bexio: the customer becomes a contact, the invoice a sales invoice with invoice lines. The integration uses OAuth2 and is outbound — changes you make in Bexio do not come back to i-Reserve.
To reach Management > Integrations you need the menu_confmod_integrations right.
1. On the Bexio side (one-time)
- Register an OAuth app in the Bexio developer portal and note the Client ID and Client Secret.
- Add the redirect URL shown by i-Reserve to that app's allowed list.
- The app needs permissions on contacts (read and write), sales invoices (read and write) and articles; i-Reserve requests those on the consent screen itself.
- Configure the VAT rates in Bexio — you need them for the mapping in step 5.
2. Authentication tab
| Field | What to enter |
|---|---|
| Client ID | Client id from the Bexio developer portal. Required. |
| Client Secret | Client secret from the Bexio developer portal. Required. |
| Redirect URL | Proposed by i-Reserve and must be listed in the Bexio app exactly like that. |
Then run Step 1 – application consent (you are redirected to Bexio to allow the integration) and Step 2 – connect to Bexio (i-Reserve exchanges the consent code for an access and refresh token). The access token is refreshed automatically from then on. If consent does expire, run steps 1 and 2 again; nothing else needs reconfiguring.
3. Details tab
| Field | What it does |
|---|---|
| Invoice field / Customer field | Read-only. External ids are kept in a dedicated reference table; these fields only show the previous storage column and will disappear in a future version. |
| Customer number prefix | (Optional) prefix in front of the contact number in Bexio. |
| Customer number length | (Optional) zero-pads the contact number to this length, e.g. 6 → 000123. |
| Finalise invoice | Yes = i-Reserve issues the invoice in Bexio right away. No = the invoice stays a draft in Bexio. |
| Send email from Bexio | Only when finalising: yes = Bexio emails the invoice to the customer's email address. No = you send it yourself. |
4. Fields: which customer data is sent?
On the integration's field card you decide, per Bexio field, which i-Reserve field fills it. By default the following is sent:
| Bexio | Default from i-Reserve |
|---|---|
| Name 1 / Name 2 | Company name, or last name + first name — depending on the contact type (see below) |
| Street | The customer's address |
| Postcode / City | Postcode and city |
| Country | Country; i-Reserve looks up the Bexio country by ISO country code |
| The customer's email address | |
| Phone fixed / mobile | Landline and mobile number |
| Contact number | The customer number, with the prefix and length from the Details tab. Only set when creating a contact. |
| Remarks | Free field, empty by default |
Besides a regular customer or company field you can also pick a composed value: full name, informal name, address or company address.
Contact type. If a company is attached to the customer, i-Reserve creates a company in Bexio (name 1 = company name, name 2 = last name). Without a company it becomes a person (name 1 = last name, name 2 = first name). That is the Bexio convention and is not configurable.
i-Reserve looks for an existing contact by the stored Bexio id first. If there is none, or that contact no longer exists, it searches by contact number. If nothing is found, i-Reserve creates a new contact.
5. VAT mapping (required)
- On the mapping card, link every i-Reserve VAT rate in use to a Bexio tax code. i-Reserve fetches the active tax codes live from Bexio, so you pick them from a list.
- If the mapping for a rate on the invoice is missing, the invoice is not created and i-Reserve reports that there is no VAT code for that rate.
- The other mapping types (article, payment condition) are not used by the Bexio integration.
6. When does it synchronise?
- Invoice finalised — as soon as an invoice is finalised in i-Reserve, first the contact and then the invoice with its lines go to Bexio.
- Sending the invoice — with "send email from Bexio" enabled, Bexio takes care of the invoice email on finalising.
- Manually — from the customer and invoice screen the Bexio button pushes the customer or invoice on request. See Bexio: comparing invoice lines and syncing manually.
For an invoice that already exists in Bexio, i-Reserve updates it: the existing lines are deleted and recreated, after which the invoice data is updated. Bexio does not accept lines when the invoice itself is updated.
7. Testing and checking
- On the integration test screen you can, without a booking: find a customer, create or update a customer, find an invoice, create an invoice and fetch the VAT codes. The data sent and Bexio's answer are shown side by side — useful for tracing an error message.
- Every call to Bexio is logged. See How do I check what an integration has done?.
- Background and a comparison with the other accounting integrations: Accounting integrations: introduction and functional background.
8. Activate & checklist
- ☐ OAuth app created in Bexio; Client ID and Client Secret noted; redirect URL allowed.
- ☐ VAT rates configured in Bexio.
- ☐ Authentication tab filled; step 1 and step 2 succeeded.
- ☐ Details tab: customer number prefix/length, finalising and email deliberately set.
- ☐ VAT mapping complete for all rates in use.
- ☐ Field card checked; contact type (person or company) matches what you expect in Bexio.
- ☐ Test invoice pushed and checked in Bexio: contact, lines, quantities and VAT.
- ☐ Integration set to active; rollback known (setting it inactive stops new synchronisations).
VAT mapping is mandatory: every i-Reserve VAT rate in use must be linked to a Bexio tax code, otherwise the invoice is not created.
The integration is outbound. If you change a contact or invoice in Bexio, it does not come back to i-Reserve; i-Reserve remains the source of the invoice.
With "finalise invoice" enabled the invoice is final in Bexio immediately and the lines can no longer be updated from i-Reserve. When in doubt, push it as a draft first.
The Bexio integration requires the Export/Administration module in the licence.






