Odoo Connector
Description
Odoo is a suite of open source business apps that include CRM, eCommerce, accounting, inventory, project management, etc. This component allows querying and managing records in an Odoo database.
Developer Note: Odoo Models
An Odoo database tracks hundreds of types of records. A default installation of Odoo includes more than 800 unique record types (more when additional apps are installed).
Each type of record is called a model, and models have human-readable names and model names.
For example, contacts in Odoo are called Contacts, and their model name is res.partner.
To list all contacts in an Odoo installation, use the List Records action and provide it a model of res.partner.
A model has fields.
Contacts for example has hundreds of fields related to a person: name, email, country_code, zip, etc.
For convenience, two utility actions are included in this component.
- List Models lists all models in an Odoo installation, including their ID, name and model name.
- List Model Fields lists all of the fields of a given model.
These two utility actions help identify the fields to set when using Create or Update records. Identify the name of the fields to set for a given model. Then, create an object, either in a code step or another action, and pass the results of that step in as a reference.
Connections
API Key
key: odooApiKeyTo authenticate with Odoo, an API key is required. This component calls Odoo's JSON-2 HTTP API and requires Odoo 19.0 or later. Earlier versions, which only support the soon to be deprecated XML-RPC transport, are not supported.
Prerequisites
- An Odoo 19.0 or later instance (Odoo Online, Odoo.sh, or self-hosted)
- An Odoo user account with permissions for the records the integration will manage
- Developer mode enabled in Odoo (required to access the API Keys interface)
Setup Steps
- Log in to the Odoo instance
- Click the user avatar in the top-right corner and select My Profile
- Open the Account Security tab
- Click New API Key and provide a descriptive name and expiration
- Copy the generated API key immediately (it is shown only once)
For more details, refer to the Odoo external API documentation.
Generate the API key from a dedicated service-account user (not a specific employee's account) so the integration is not tied to an individual's access.
Configure the Connection
Create a connection of type API Key and configure the following fields:
- Odoo Base URL: Enter the URL used to log in to Odoo, for example
https://example-company.odoo.com. Omit any trailing slash. - Server Port: Leave blank for default HTTP (80) or HTTPS (443). Set only when a self-hosted Odoo instance listens on a non-standard port.
- Odoo Database Name: Click the user avatar in the top-right within Odoo and select My Databases to find the database name.
- API Key: Enter the API key copied in the previous section.
| Input | Notes | Example |
|---|---|---|
| API Key | The API key used to authenticate requests. In Odoo, open the profile menu, then Account Security, and create a new API Key. Requires Odoo 19.0 or later. | |
| Odoo Base URL | The URL used to log in to the Odoo instance. | https://yourdomain.odoo.com |
| Odoo Database Name | The name of the Odoo database to connect to. Found in Odoo by clicking the user icon at the top-right and selecting 'My Databases'. | odoo_db |
| Server Port | The port to connect on. Leave blank to use the default HTTP (80) or HTTPS (443) port. | 443 |
Basic Authentication (Deprecated)
key: odooBasicAuthThe Basic Authentication (Deprecated) connection authenticates against Odoo's XML-RPC API with a username and password. It is maintained for backwards compatibility with integrations built against earlier versions of this component.
Odoo will drop XML-RPC support in 19.1 (mid-2026). Migrate existing integrations to the API Key connection before that release. New integrations should use the API Key connection instead.
Prerequisites
- An Odoo instance that still exposes the XML-RPC endpoint
- An Odoo user account with permissions for the records the integration will manage
Configure the Connection
Create a connection of type Basic Authentication (Deprecated) and configure the following fields:
- Odoo Base URL: Enter the URL used to log in to Odoo, for example
https://example-company.odoo.com. Omit any trailing slash. - Server Port: Leave blank for default HTTP (80) or HTTPS (443). Set only when a self-hosted Odoo instance listens on a non-standard port.
- Odoo Database Name: Click the user avatar in the top-right within Odoo and select My Databases to find the database name.
- Username: The username (typically the email address) used to log in to Odoo.
- Password or API Key: The user's password, or an API key generated under Account Security → New API Key.
| Input | Notes | Example |
|---|---|---|
| Odoo Base URL | The URL used to log in to the Odoo instance. | https://yourdomain.odoo.com |
| Odoo Database Name | The name of the Odoo database to connect to. Found in Odoo by clicking the user icon at the top-right and selecting 'My Databases'. | odoo_db |
| Password or API Key | The password or API key used to authenticate the user against the Odoo XML-RPC API. | |
| Server Port | The port to connect on. Leave blank to use the default HTTP (80) or HTTPS (443) port. | 443 |
| Username | The username used to log in to the Odoo instance. | john.doe@example.com |
Triggers
New and Updated Records
Polls an Odoo model for records whose write_date is at or after the last poll. Records whose create_date is also after the last poll go to the created bucket; older records modified since the last poll go to updated. | key: pollChangesTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
| Show New Records | When enabled, records whose | true |
| Show Updated Records | When enabled, records whose | true |
Example Payload for New and Updated Records⤓
Data Sources
Select Model
A picklist of models in the Odoo database. | key: selectModel | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Model Search | Filter results to entries whose technical model identifier contains this case-insensitive search term. | res.partner |
| Name Search | Filter results to entries whose name contains this case-insensitive search term. | Partner |
Example Payload for Select Model⤓
Select Record
A picklist of records in the Odoo database. | key: selectRecordById | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
Example Payload for Select Record⤓
Actions
Create Record
Create a new record of a given type. | key: createRecord
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| External ID | A unique identifier that maps this record to its counterpart in an external system. Use the 'module.name' format. | custom_partner.abc_123 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
| Parameters | The field names and values to set on the record. Must be a JSON object keyed by Odoo field name. |
Example Payload for Create Record⤓
Delete Record By ID
Delete a record by its numerical ID. | key: deleteRecordById
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Record ID | The numeric identifier of the target record assigned by Odoo. | 25 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
Example Payload for Delete Record By ID⤓
Get Record by External ID
Get a record by its external ID. | key: getRecordByExternalId
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| External ID | A unique identifier that maps this record to its counterpart in an external system. Use the 'module.name' format. | custom_partner.abc_123 |
Example Payload for Get Record by External ID⤓
Get Record By ID
Fetch a record by its numerical ID. | key: getRecordById
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Record ID | The numeric identifier of the target record assigned by Odoo. | 25 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
Example Payload for Get Record By ID⤓
List Model Fields
List all fields for a given model. | key: listModelFields
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
Example Payload for List Model Fields⤓
List Models
Fetch a list of models installed in the Odoo database. | key: listModels
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Fetch All | When true, automatically fetches all pages of records. Overrides the Limit and Offset inputs. | false |
| Limit | The maximum number of records to return per page. See Pagination. | 10 |
| Model Search | Filter results to entries whose technical model identifier contains this case-insensitive search term. | res.partner |
| Name Search | Filter results to entries whose name contains this case-insensitive search term. | Partner |
| Offset | The number of records to skip before starting the page (0-based). See Pagination. | 20 |
Example Payload for List Models⤓
List Records
Fetch a list of records of a given type. | key: listRecords
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Fetch All | When true, automatically fetches all pages of records. Overrides the Limit and Offset inputs. | false |
| Limit | The maximum number of records to return per page. See Pagination. | 10 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
| Offset | The number of records to skip before starting the page (0-based). See Pagination. | 20 |
If Odoo is expected to return lots of records, the integration can leverage pagination to process a small set of records at a time.
See Odoo's External JSON-2 API reference for details on the limit and offset parameters used for pagination.
Example Payload for List Records⤓
Raw Request (API Key)
Send a raw HTTP request to the Odoo JSON-2 API. Requires the API Key connection. | key: rawHttpRequest
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Data | The HTTP body payload to send to the URL. | {"exampleKey": "Example Data"} |
| File Data | File Data to be sent as a multipart form upload. | [{key: "example.txt", value: "My File Contents"}] |
| File Data File Names | File names to apply to the file data inputs. Keys must match the file data keys above. | |
| Form Data | The Form Data to be sent as a multipart form upload. | [{"key": "Example Key", "value": new Buffer("Hello World")}] |
| Header | A list of headers to send with the request. | User-Agent: curl/7.64.1 |
| Max Retry Count | The maximum number of retries to attempt. Specify 0 for no retries. | 0 |
| Method | The HTTP method to use. | |
| Query Parameter | A list of query parameters to send with the request. This is the portion at the end of the URL similar to ?key1=value1&key2=value2. | |
| Response Type | The type of data you expect in the response. You can request json, text, or binary data. | json |
| Retry On All Errors | If true, retries on all erroneous responses regardless of type. This is helpful when retrying after HTTP 429 or other 3xx or 4xx errors. Otherwise, only retries on HTTP 5xx and network errors. | false |
| Retry Delay (ms) | The delay in milliseconds between retries. This is used when 'Use Exponential Backoff' is disabled. | 0 |
| Timeout | The maximum time that a client will await a response to its request | 2000 |
| URL | The path portion of the URL to call. The connection's base URL (for example, | /json/2/res.partner/search_read |
| Use Exponential Backoff | Specifies whether to use a pre-defined exponential backoff strategy for retries. When enabled, 'Retry Delay (ms)' is ignored. | false |
Raw Request (Basic Auth)
Issue any execute_kw action against the Odoo XML-RPC API. Requires the Basic Authentication (Deprecated) connection. | key: rawRequest
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Method | The Odoo model method to invoke via | search_read |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
| Parameters | A JSON array of positional arguments to pass to |
Set External ID
Add an external ID to a record that does not have one. | key: setExternalId
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| External ID | A unique identifier that maps this record to its counterpart in an external system. Use the 'module.name' format. | custom_partner.abc_123 |
| Record ID | The numeric identifier of the target record assigned by Odoo. | 25 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
Example Payload for Set External ID⤓
Update Record
Update an existing record of a given type. | key: updateRecord
| Input | Notes | Example |
|---|---|---|
| Connection | The Odoo connection to use. | |
| Record ID | The numeric identifier of the target record assigned by Odoo. | 25 |
| Model | The type of record to query. Use the 'List Models' action for a list of available models. | res.partner |
| Parameters | The field names and values to set on the record. Must be a JSON object keyed by Odoo field name. |
Example Payload for Update Record⤓
Changelog
2026-06-02
Migration preparations for the soon to be deprecated XML-RPC API to Odoo's JSON-2 HTTP API (required for the Odoo 19.1 SaaS rollout in mid-2026)
- Added the API Key connection that authenticates to Odoo's JSON-2 HTTP API using an API key
- Added New and Updated Records polling trigger that filters Odoo records by
write_dateusing thesearch_readdomain (write_date>= last poll); records whosecreate_dateis also after the last poll go to thecreatedbranch, while older records modified since the last poll go toupdated. The model picker reuses the existingselectModeldatasource so the trigger works against any Odoo model withcreate_date/write_date - The Basic Authentication (Deprecated) connection is maintained as a compatibility shim and will stop working when Odoo drops XML-RPC support in 19.1 (mid-2026); migrate existing integrations to the API Key connection before that release
- The New and Updated Records polling trigger supports both the API Key and Basic Authentication (Deprecated) connections, matching the rest of the component
2026-05-20
Applied automated security patches and code formatting updates
2026-04-30
Updated spectral version
2025-10-21
Added inline data sources for models and records to enhance data selection capabilities