Overview
This guide walks you through connecting your Odoo instance to VeloPBX. Odoo uses an API key authentication model (no OAuth round-trip), so the setup is the simplest of the three CRM integrations.
Setup time: ~7 minutes. Tenant admin only.
By the end of this guide, every inbound and outbound call placed by extensions in your tenant will:
- Match against contacts, leads, and companies in your Odoo database
- Pop the matched record in PortSIP ONE before the call connects
- Auto-log a complete activity entry (with recording and optional AI transcript) on the matched record
Prerequisites
Before you start, make sure you have:
- A running Odoo instance (Community 17.0+ or Enterprise 17.0+/18.0+) accessible from the public internet
- An Odoo administrator account (the email you use to sign into Odoo)
- Tenant Admin Full Access privileges in VeloPBX
- Your Odoo database name (visible in the Odoo URL bar or under Settings → General Settings → Activate the developer mode → Database information)
Step 1 — Generate an API key in Odoo
Sign into your Odoo instance as the administrator. The API key is generated per-user and is the credential VeloPBX will use to read contacts and write activities.
- Click your profile avatar in the top-right corner of any Odoo screen.
- Click My Profile (in newer Odoo versions: Preferences).
- Open the Account Security tab.
- Click New API Key.
- In the dialog:
- Description: enter
VeloPBX Integration(or similar — this is just a label so you can identify it later in your Odoo admin) - Validity: choose how long the key should be active. For production use, Permanent is recommended; for testing, 30 days is reasonable.
- Click Generate Key.
Odoo will show you the key once. Copy it immediately and keep it somewhere safe — Odoo will not display it again.
Important: Treat the API key as a password. If you suspect it has been compromised, revoke it from the same screen and generate a new one. VeloPBX can be reconfigured with the new key in under a minute.
Step 2 — Confirm your Odoo URL and database name
VeloPBX needs three Odoo connection values that you will paste in the next step:
| Value | Where to find it | Example |
|---|---|---|
| Odoo URL | The base URL of your Odoo instance (no trailing slash) | https://acme.odoo.com |
| Database name | Visible in the URL bar after sign-in, or in Settings → Activate developer mode → Database | acme-prod |
| Username | The login email of the Odoo admin whose API key you generated | [email protected] |
| API key | The key you generated in Step 1 | (long random string) |
Note: The database name is not the company name. On Odoo Online (
*.odoo.com), the database name is usually the subdomain. On self-hosted Odoo, it’s whatever name was set when the database was created.
Step 3 — Open Integrations in VeloPBX
Sign into the VeloPBX Web Portal as a tenant administrator at:
https://pbx.fortis-tele.com:8887
In the left navigation, click Integrations, then CRM.
Step 4 — Select Odoo from the dropdown
In the Select a CRM solution dropdown, choose Odoo.
The Odoo configuration form appears.
Step 5 — Paste your Odoo connection details
Fill in the four required fields with the values from Step 2:
- Base URL —
https://acme.odoo.com(your Odoo instance URL) - Database —
acme-prod(your database name) - Username —
[email protected](your Odoo admin email) - API Key — the key from Step 1
Step 6 — Configure integration settings
Below the connection details you’ll see toggles that control how VeloPBX interacts with Odoo. Recommended defaults:
| Setting | Description | Recommended |
|---|---|---|
| Create new contacts from softphone | Allow agents to create new Odoo records from PortSIP ONE | On |
| New contacts created as | Create new records as Individual or Lead | Individual (sales-led teams: Lead) |
| Contact lookup order | Order in which Odoo is searched: Individuals → Leads → Companies | Default order |
| Lookup condition | Always query Odoo, or only When not found locally in PBX contacts | Always |
| Auto-log call activities | Write an Odoo activity for every completed call | On |
| Auto-log call recording | Attach recording link to the Odoo activity | On (if call recording is enabled) |
| Secure recording URL | Use a signed/expiring URL for recording links | On (recommended for compliance) |
Step 7 — Save and test
- Click Save. VeloPBX validates the connection by making a test API call to Odoo.
- If the credentials are valid, the connection becomes active immediately. The status indicator turns green.
- To verify:
- Place an outbound call from any extension in your tenant to a phone number that exists in your Odoo contacts.
- The matched contact should pop in PortSIP ONE during the call.
- After the call ends, open the contact in Odoo — you should see a fresh activity entry with the call duration, direction, and (if enabled) the recording link.
Settings reference
Once connected, the same settings can be edited any time on Integrations → CRM → Odoo. Changes take effect on the next call after Save — no PBX restart required.
| Field | Type | Default | |
|---|---|---|---|
base_url | text | (your URL) | |
database | text | (your DB) | |
username | text | (admin email) | |
api_key | password | (your key) | |
enable_create_contact | boolean | true | |
contact_created_as | Individual | Lead | Individual |
contact_lookup_order | array | [Individuals, Leads, Companies] | |
contact_lookup_condition | Always | NotFoundLocally | Always |
enable_call_logging | boolean | false | |
enable_call_recording_logging | boolean | false | |
secure_call_recording_logging | boolean | false |
Troubleshooting
“Connection failed: invalid credentials”
- Confirm the Username is the exact Odoo login email (not a display name).
- Confirm the API Key has not expired or been revoked. Re-generate from Odoo if needed.
- Check that the Odoo user account is active and has access to the database.
“Connection failed: database not found”
- The Database field is case-sensitive. Verify it matches Odoo exactly (under Settings → developer-mode → Database information).
- On Odoo Online, the database name is typically your subdomain (e.g.
acmeif your Odoo URL isacme.odoo.com).
Calls aren’t matching contacts
- Verify the phone numbers in Odoo are stored in E.164 format (e.g.
+37491223344) or in a format that Odoo’s contact search recognizes. - Check the Contact lookup order — if your contacts are stored as Companies but the lookup order is set to Individuals first, you may want to reorder.
Activities aren’t being created
- Confirm Auto-log call activities is toggled On.
- Confirm the Odoo user (whose API key you used) has write permissions on the contact’s model.
Recording links don’t open
- Confirm Auto-log call recording is enabled.
- If using Secure recording URL, the link expires after the configured TTL — clicking an old link will fail. This is expected behavior.
FAQ
Do I need an Odoo Enterprise license? No — Odoo Community editions 17.0+ are supported. Enterprise features (like CRM module enhancements) work too if you have them.
Can multiple PBX tenants connect to the same Odoo database? Yes. Each tenant uses its own API key (typically tied to a different Odoo user). Activity logs are written by the user behind the API key, so you can separate which tenant logged which call.
What happens when the API key is rotated in Odoo? The integration breaks until you re-paste the new key in VeloPBX. Calls still flow normally — only CRM matching and logging stop. Re-saving the new key restores the integration immediately.
Are AI transcripts billed by VeloPBX? No — AI transcription uses your own Azure Speech / OpenAI / AWS Transcribe credentials (configured separately under Tenant → AI Transcription). VeloPBX does not mark up cloud AI costs. See the AI Transcription section.
Need help?
If you get stuck, talk to a routing engineer — we can set up a sandbox bind on your tenant within 24 hours and walk through your first integration call live.