New France e-invoicing mandate goes live September 2026 — our implementation is ready. See all mandates →
Integrations

Odoo Integration

The Clearvo E-Invoicing module for Odoo 17 connects your Odoo Accounting install to the Clearvo API. Once connected, every invoice you post is automatically submitted to the relevant tax authority — in France, Germany, Italy, Poland, Spain, and 27 more countries — without leaving Odoo.

The module is free and open source. Install it from the Odoo Apps store or directly from github.com/clearvo/clearvo-odoo.

What the module does

  • Auto-submit on post — confirming an invoice triggers a Clearvo API call. Format conversion (UBL, FatturaPA, XRechnung, etc.) and authority submission happen in the background.
  • Live clearance status — a status panel on every invoice shows Pending, Accepted, Rejected, or Duplicate, sourced directly from the tax authority.
  • Real-time updates via webhook — Clearvo pushes status changes to your Odoo instance the moment the authority responds, so you don't wait for a scheduled poll.
  • Manual retry — if a submission fails, a Retry button appears with the full error message from the authority.
  • Multi-company — each Odoo company has its own API key, currency, and auto-submit toggle.
  • Sandbox mode — use a csk_test_* key to test end-to-end without any invoice reaching a tax authority.
Integrations / Odoo

Setup

1
Install the module

In Odoo, go to Apps, search for Clearvo E-Invoicing, and install. Requires the account module (Accounting). No other dependencies.

2
Create a Clearvo account and generate an API key

Sign up at clearvo.io — no credit card required. In the dashboard, go to Settings → API Keys and create an entity-scoped key for your legal entity. Copy the key — it is shown only once.

For sandbox testing, create a sandbox entity and use its csk_test_* key instead.

3
Connect Odoo to Clearvo

In Odoo, go to Accounting → Configuration → Clearvo E-Invoicing. Paste your API key and click Connect. Clearvo validates the key instantly and registers a webhook endpoint pointing back to your Odoo instance.

The settings page shows your connected status, the registered entity name, and controls for auto-submit and the webhook URL.

4
Post an invoice

Confirm any customer invoice. The Clearvo status panel appears at the top of the invoice form and updates in real time. In sandbox mode, most countries resolve to Accepted within a few seconds.

Integrations / Odoo

Tax codes

Clearvo uses EN16931 tax category codes (S, AA, AE, K, G, E, O) to determine VAT treatment per invoice line. The module detects the correct code automatically from your Odoo tax configuration — you don't need to configure anything for standard cases.

Auto-detection logic

The module reads each invoice line's tax, its amount, and any fiscal position tags applied to it. The mapping is:

Your tax in OdooCodeMeaning
Any tax with amount > 0%SStandard rated
Tax with "reduced rate" tagAAReduced rate (some countries)
0% with intra-EU / IC tagKIntra-EU supply (zero-rated, reverse charge by buyer)
0% with export / outside-EU tagGExport outside the EU
0% with reverse charge tagAEDomestic reverse charge
0% with no special tagEExempt
Fixed amount taxOOut of scope / not subject to VAT
Fiscal position tags are evaluated in the order above — the first matching rule wins. If a tax matches multiple rows (e.g. 0% and has both an IC tag and a reverse charge tag), place the most specific tag rule first by ensuring only one tag is applied per fiscal position.
Integrations / Odoo

Manual override

If auto-detection gives the wrong code for a specific tax — for example, a 0% reduced-rate supply that Odoo doesn't tag with a fiscal position — you can override it directly on the tax record.

  1. Go to Accounting → Configuration → Taxes and open the tax you want to override.
  2. Locate the Clearvo Tax Code Override field (added by the module to the Advanced Options tab).
  3. Select the correct EN16931 code from the dropdown. The auto-detected code is shown next to the override field for comparison.
  4. Save. The override applies to all future invoices that use this tax. Existing posted invoices are not retroactively updated.

The override takes precedence over auto-detection. To revert to auto-detection, clear the override field.

Integrations / Odoo

Webhooks

When you connect Clearvo to Odoo, the module registers a webhook endpoint with Clearvo pointing to your Odoo instance. Clearvo calls this endpoint whenever a clearance status changes — for example, when Italy's SDI moves an invoice from Pending to Accepted.

The webhook URL is derived automatically from your Odoo base URL (the value of web.base.url in the system parameters). It looks like:

https://your-odoo.example.com/clearvo/webhook/<company_id>

The company ID in the URL is what lets Clearvo target the right entity in a multi-company Odoo instance. If you change your Odoo domain, disconnect and reconnect via the wizard (Accounting → Configuration → Clearvo E-Invoicing → Connect) — reconnecting re-registers the webhook with the new URL.

The webhook endpoint must be reachable from the public internet. If your Odoo server is behind a firewall or on a private network, webhooks won't arrive. Use polling instead.
Integrations / Odoo

Polling (private / on-premises instances)

If your Odoo server is not reachable from the public internet — common for on-premises installs behind a VPN or NAT — webhooks won't work. Enable the scheduled polling action instead.

  1. Go to Settings → Technical → Automation → Scheduled Actions.
  2. Find Clearvo: poll pending invoices.
  3. Set it to Active and choose an interval — every 5 or 15 minutes is typical.

When polling is active, Odoo calls GET /v1/status for each invoice in a non-terminal state and updates the clearance status accordingly. Webhook push and polling can run simultaneously — polling is a safe fallback if a webhook is missed.

Integrations / Odoo

Requirements

  • Odoo 17.0 (Community or Enterprise)
  • The account module (Accounting / Invoicing)
  • A Clearvo account — free trial at clearvo.io
  • Outbound HTTPS access from the Odoo server to api.clearvo.io (port 443)

Odoo 16.0 support is planned. Check the GitHub repo for available branches.

Integrations / Odoo

Troubleshooting

Connection fails with "Invalid API key"

Check that you copied the full key including the csk_live_ or csk_test_ prefix. API keys are shown only once in the Clearvo dashboard — if you've lost it, generate a new one under Settings → API Keys.

Invoice posts but no Clearvo status panel appears

The module may not be installed, or the Clearvo configuration may be empty. Go to Accounting → Configuration → Clearvo E-Invoicing and confirm the API key and connected status are shown. If the field is blank, paste your key and click Connect.

Status stays "Pending" for more than a few minutes

Italy (SDI) and Romania (ANAF) can take minutes to hours to respond. For other countries, a stuck Pending status usually means the webhook is not being delivered. Check that your Odoo URL is publicly reachable, or enable the polling scheduled action.

Invoice is rejected — what do I do?

The rejection reason from the tax authority appears in the Clearvo status panel on the invoice. Fix the issue (wrong VAT number, missing required field, etc.), reset the invoice to draft, make your correction, and re-post. The module will re-submit automatically.

Sandbox invoices work but production submissions fail

Confirm you've switched from a csk_test_* key to a csk_live_* key. Sandbox and production environments are completely separate — a sandbox key will return a 401 on the production database and vice versa.

Something else

Documentation: clearvo.io/docs
Email: support@clearvo.io