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.
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.
Setup
In Odoo, go to Apps, search for Clearvo E-Invoicing, and install. Requires the account module (Accounting). No other dependencies.
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.
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.
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.
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 Odoo | Code | Meaning |
|---|---|---|
| Any tax with amount > 0% | S | Standard rated |
| Tax with "reduced rate" tag | AA | Reduced rate (some countries) |
| 0% with intra-EU / IC tag | K | Intra-EU supply (zero-rated, reverse charge by buyer) |
| 0% with export / outside-EU tag | G | Export outside the EU |
| 0% with reverse charge tag | AE | Domestic reverse charge |
| 0% with no special tag | E | Exempt |
| Fixed amount tax | O | Out of scope / not subject to VAT |
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.
- Go to Accounting → Configuration → Taxes and open the tax you want to override.
- Locate the Clearvo Tax Code Override field (added by the module to the Advanced Options tab).
- Select the correct EN16931 code from the dropdown. The auto-detected code is shown next to the override field for comparison.
- 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.
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.
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.
- Go to Settings → Technical → Automation → Scheduled Actions.
- Find Clearvo: poll pending invoices.
- 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.
Requirements
- Odoo 17.0 (Community or Enterprise)
- The
accountmodule (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.
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