Integrations module

Make GSE-Web the WMS of your
Odoo ERP

Odoo keeps your products, your partners, your orders and your accounting. GSE-Web prepares, ships, receives and counts the goods, and is the source of truth for physical stock.

Home / Documentation / Odoo Connector
Connector being rolled out

This documentation describes how the Odoo connector works. It is not yet open to organisations: the “Odoo” entry on the “Integrations” page only becomes available once its rollout is complete. Write to us if you would like to be notified when it opens.

In brief

The Odoo connector links an Odoo (versions 17, 18 and 19) to a GSE-Web store. Odoo remains the master of its products, its partners and its orders; GSE-Web is the source of truth for physical stock. It is set up by an administrator of the organisation, in the ADMIN › “Integrations” menu. Every exchange is an option, off by default: you compose the connector that suits you.

  • What comes into GSE-Web: the confirmed sales orders of the linked warehouse, which become confirmed outbound orders with stock reserved; the confirmed purchase orders, which become supplier orders; optionally, Odoo's products and partners.
  • What goes out to Odoo: every receipt, issue, adjustment, inventory or transfer of the linked store, as a stock movement (never an overwritten quantity), a few seconds later; the deliveries and receipts validated in GSE-Web; optionally, GSE-Web's product records.
  • When: if you tick “Receive notifications from Odoo”, an order arrives as soon as Odoo notifies GSE-Web. A periodic pass (5 minutes by default, from 1 to 15) acts as a safety net and catches up on anything that was missed.
  • What is never done: no quantity is converted, no partial order is created, nothing is deleted in Odoo, and a stock gap is never corrected silently. Invoicing and accounting stay with Odoo.
  • Switching off: pause, disconnection or closure of the module at any time, without losing anything; on resume, the orders placed in the meantime are caught up.
Before you start

Prerequisites

Check these points before opening the connector screen: the connection test verifies them and clearly refuses anything that does not fit.

✓

Odoo 17, 18 or 19

All three versions are supported. GSE-Web reads the Odoo version and chooses the exchange protocol: JSON-RPC up to Odoo 18, JSON-2 from Odoo 19. Any other version is clearly refused.

✓

An integration user and its API key

In Odoo, create a user reserved for GSE-Web and generate an API key for it (Preferences › Account Security › New API Key). Useful rights: “Inventory / User” to write movements, “Sales / User” and “Purchase / User” to read orders, “Technical Settings” only to arm real time.

✓

An Odoo reachable over the Internet, in HTTPS

The server address must be public and in HTTPS, with no credentials or parameters. A private network address is refused. On Odoo Online, external access only exists on the “Custom” plans.

✓

The modules opened for your organisation

“Integrations”, then “Odoo”. Ask KLS-Concept to open them. Without “Integrations”, the menu entry does not appear; without “Odoo”, its card shows “Not available for your organisation”.

✓

An ADMIN account with two-factor authentication

Entering the API key is refused as long as two-factor authentication is not enabled on your account, in “My information”.

✓

A real store and an Odoo warehouse

The connector links one Odoo warehouse to one real GSE-Web store. An exercise store is refused. Only one warehouse per connection.

✓

The same currency

The currency of the Odoo company must be that of your organisation. If Odoo has several companies, you choose the one to link.

✓

For real time: “Automated Actions”

For orders to arrive as soon as Odoo notifies GSE-Web, the “Automated Actions” module must be installed in Odoo. Otherwise, only the periodic pass works, and a point to handle tells you so.

Step-by-step setup

Six steps, in the order of the screen.

1

Open the connector screen

ADMIN menu › “Integrations”. The Odoo card is in the “ERP” category. Click “Set up” (the button becomes “Manage” once the connection is saved).

2

“Odoo server” card

Fill in the “Server address” (for example https://mycompany.odoo.com), the “Database”, the “Integration user login” (usually its e-mail address in Odoo), the “API key” and the “GSE-Web store” to link. The “Exchange protocol” stays on “Automatic” unless you have a specific need.

The API key is write-only: once saved, it is never shown again, the screen only displays a few of its characters. To keep it, leave the field empty; to replace it, enter a new one. If you change the server address or the database, the key must be entered again: it never follows another target.

3

Test the connection, then choose the Odoo company and warehouse

Save, then “Test the connection”: GSE-Web queries Odoo, checks the key, the rights, the version and the currency, and the screen displays, for example, “Odoo 18.0 · JSON-RPC protocol”. Odoo then declares its companies and warehouses: choose the “Odoo company” (required as soon as there are several) and the “Odoo warehouse” linked to the GSE-Web store, then “Save”. Even when refused, the test keeps what Odoo declared, so that you can correct it.

4

Compose the options

The “What flows between GSE-Web and Odoo” card groups the options by theme. Everything is unticked by default: tick only what you need.

  • Sales › “Import Odoo sales orders”: with the “Imported sales order states” (“Confirmed” by default, “Locked” as well if you wish).
  • Sales › “Validate deliveries in Odoo”: a delivered order validates the delivery of the sales order in Odoo.
  • Stock › “Send stock movements to Odoo in real time”: every movement of the linked store goes out to Odoo.
  • Stock › “Measure stock gaps every night”: GSE-Web compares its stock with Odoo's.
  • Purchases › “Import Odoo purchase orders”: with the “Imported purchase order states” (“Confirmed” by default, “Locked” as well if you wish).
  • Purchases › “Validate receipts in Odoo”: a receipt made in GSE-Web is validated in Odoo.
  • Products and partners › “Take products from Odoo” or “Send GSE-Web product records to Odoo”: mutually exclusive, only one product master; ticking one unticks the other. The “Unit of measure mapping” associates the identifier of an Odoo unit with the code of the GSE-Web unit.
  • Products and partners › “Take partners from Odoo”: address, VAT and payment terms of the customers.
  • Real time › “Receive notifications from Odoo”: orders arrive as soon as Odoo notifies GSE-Web.
  • Real time › “Fallback polling interval (minutes)”: 5 by default, from 1 to 15. “Maximum age of a caught-up order (days)”: 30 by default, from 1 to 90; an older order becomes a point to handle instead of being imported automatically.
5

Save and test

Click “Save”. “Test the connection” and “Activate” act on the saved configuration: as long as a change has not been saved, the screen reminds you. If an option that writes to Odoo is ticked while the integration user does not have write access, the test flags it.

6

Activate

“Activate” runs the test again (an Odoo warehouse is then required). If “Receive notifications from Odoo” is ticked, GSE-Web creates “GSE-Web” automated actions in Odoo that notify it of every change. The status changes to “Active — fallback polling every N minutes”. Anything that predates activation is never replayed: neither earlier orders nor earlier stock movements.

What is synchronised, and who is the source of truth

Each piece of data has a single master. GSE-Web does not dictate its products or its orders to Odoo; Odoo never dictates a physical quantity to GSE-Web.

📦 GSE-Web is the source of truth

  • ✓Physical stock: quantities and movements
  • ✓Deliveries: what actually left
  • ✓Receipts: what actually arrived
  • ✓Products, if you choose “Send GSE-Web product records to Odoo”

🏢 Odoo is the source of truth

  • ✓Sales orders
  • ✓Purchase orders
  • ✓Partners (customers)
  • ✓Products, by default or if you choose “Take products from Odoo”
  • ✓Invoicing
  • ✓Accounting

The rules

  • Only one product master. “Take products from Odoo” and “Send GSE-Web product records to Odoo” are mutually exclusive. Products are matched by reference (Odoo internal reference = GSE-Web reference); they are never deleted in Odoo, a product that is withdrawn is archived there.
  • One sales order = one confirmed outbound order of the linked store, for the quantity left to deliver, with the “Reserve the products for this order” box ticked: the whole quantity is reserved, even beyond the stock (the shortfall appears as “Awaiting receipt” on the order).
  • Never a partial order. If a line causes a problem — unknown product, unit different from the stock unit, product tracked by lot or serial number, different currency, archived customer — no order is created and a point to handle explains why. “Replay” resumes the import once the cause has been corrected. No quantity is ever converted.
  • One customer = one partner with Odoo's code. The partner code is the customer's reference (ref) in Odoo, or ODOO- followed by its identifier if it has none. It is never matched by e-mail.
  • Order cancelled in Odoo: the order is cancelled and its reservations released, unless someone is already handling it; a point to handle then leaves the decision to the team. Order changed after the import: the change is not carried over to the order, a point to handle invites you to check it. Order already delivered outside GSE-Web: no order is created, a point to handle says so.
  • Delivery validated in Odoo: a delivered or closed order validates the delivery with the quantities actually prepared. If less than requested left, the remainder stays open in Odoo. GSE-Web never cancels an order in Odoo.
  • Stock as movements, never as an overwritten value. Every receipt, adjustment, inventory or transfer of the linked store becomes a stock movement in Odoo, a few seconds after the change. The same movement is never sent twice. Nothing prior to activation is replayed. Valuation (cost) stays with Odoo.
  • No double counting. An issue resulting from an order imported from Odoo is deducted in Odoo by its delivery, and a receipt for an imported purchase order by its receipt: these movements are not also sent as stock movements.
  • Gaps measured, never corrected silently. Every night, GSE-Web compares its stock with Odoo's, product by product. A gap becomes a point to handle with both quantities; nothing is written, in either direction. “Align Odoo on GSE-Web” is an ADMIN action: it sends Odoo a dated adjustment, GSE-Web's stock is not modified.
  • One purchase order = one confirmed supplier order in the Purchasing module, on the supplier partner with the same code, at the net price of the line, with its expected date. Same refusals as for sales: never a partial order. An order changed or cancelled in Odoo after the import is not carried over: a point to handle says so.
  • Receipt validated in Odoo: a receipt made in GSE-Web on an imported order validates the order's receipt in Odoo with the quantity received; what remains to be received stays open.
  • Real time and safety net. With “Receive notifications from Odoo”, Odoo notifies GSE-Web of every change; GSE-Web groups the notifications (2 seconds of quiet, 10 at most) then re-reads the records in Odoo. Without this option, or if Odoo cannot call, the periodic pass is enough. Odoo's variants are taken in as independent simple products.

Day to day

The connector screen reads from top to bottom: the status, the server, the options, the buttons, then the points to handle and the journal.

The “Status” card

It tells you where the connection stands, the Odoo version and the protocol chosen, the date of the last synchronisation, the last error and the number of points to handle. On the card in the “Integrations” page, the status fits in a single chip.

  • Not active yet “Configured, not yet activated”.
  • Connected “Active — fallback polling every N minutes”.
  • Paused “Paused — nothing is sent or imported”.
  • Stopped — check it “Stopped by the server — check the key and test”.

“Synchronise now”

Orders arrive as soon as Odoo notifies GSE-Web, or at the latest at the next polling, and stock goes out to Odoo a few seconds after every movement: the screen reminds you under the button. This button is only for starting a full pass right away. The message says whether the pass finished, whether it raised points to handle, or why it was not started.

The “What flows between GSE-Web and Odoo” card

It lists the options by theme — Sales, Stock, Purchases, Products and partners, Real time — with, for each, what it does. The options that write to Odoo carry the note “Writes in Odoo: the integration user needs write access.” If Odoo cannot notify GSE-Web, the screen says so and only the fallback polling works.

The “Journal”

Every pass appears there with its type and its result. Types: “Product records upload”, “Products taken from Odoo”, “Partners taken from Odoo”, “Stock upload (catch-up)”, “Live stock”, “Sales order catch-up”, “Order received from Odoo”, “Deliveries validated in Odoo”, “Purchase order catch-up”, “Receipts validated in Odoo”, “Stock gap measurement”, “Automated actions check”, “Connection test”. Results: “Succeeded”, “Partial”, “Failed”, “Running”, “Interrupted”. A click on a pass opens its detail, item by item: order imported, delivery validated, movement sent or already in Odoo, product created, updated or linked… (200 items at most per pass). Passes that changed nothing can be hidden.

The “Points to handle”

A line that does not go through never blocks the synchronisation: it becomes a point to handle and the rest carries on. Correct the cause in Odoo or in GSE-Web, then “Replay”; otherwise “Ignore”.

  • “Replay” is offered for sales and purchase orders, deliveries and receipts: it re-reads the record in Odoo and tries again. The other points disappear on their own once their cause is corrected.
  • “Ignore” files the point away: an ignored point does not come back until its cause has gone away and reappeared. “Ignore all”, at the top of the list, files away all open points at once after confirmation; no order is imported as a result.

Notifications from Odoo

Odoo cannot call GSE-Web: only the fallback polling works

Cause
“Receive notifications from Odoo” is ticked, but the “Automated Actions” module is not installed in Odoo, or the integration user does not have the technical rights to create the actions.
What to do
Install the module in Odoo and give the integration user the “Technical Settings” right, then test again. In the meantime, the periodic pass imports the orders.

Some “GSE-Web” automated actions were disabled or missing in Odoo

Cause
Someone disabled or deleted a “GSE-Web” action in Odoo; the check, every 6 hours, detected it.
What to do
GSE-Web reactivates or recreates it when it can, and the journal says so. Otherwise, check in Odoo that the “GSE-Web” actions are active.

Products and partners

Product …: not found in Odoo, its stock is not sent

Cause
Stock movements are being sent, but no storable product in Odoo has this product's reference.
What to do
Create the product in Odoo with the same reference (storable), or tick “Send GSE-Web product records to Odoo”. The point disappears when the movement goes out.

Product … refused by Odoo (code)

Cause
Odoo refused the record sent by GSE-Web; its refusal code is displayed.
What to do
Starting from that code, check the integration user's rights and the product record in Odoo.

Product … deleted in Odoo: to recreate or unlink

Cause
The linked product no longer exists in Odoo.
What to do
Recreate it in Odoo with the same reference. If it should no longer be there, write to us.

Product …: tracked by lot or serial number in Odoo, not supported

Cause
The connector does not handle products tracked by lot or by serial number in Odoo.
What to do
Nothing to do in GSE-Web: this product is not taken in. Manage it directly in Odoo.

Product …: its Odoo unit has no mapping

Cause
The product's unit of measure in Odoo is not in the “Unit of measure mapping”.
What to do
Add the identifier of the Odoo unit and the code of the matching GSE-Web unit, save, then run the synchronisation again.

Product …: this reference is already used in Odoo by another product

Cause
This product's reference is carried by several products in Odoo, or by a product already linked to another GSE-Web product.
What to do
Make sure one reference designates a single product, on both sides.

Partner …: could not be taken from Odoo

Cause
The partner record could not be created or updated in GSE-Web.
What to do
Check the partner record in Odoo (name, address), then run the synchronisation again; if the point comes back, write to us.

Sales orders

Order …: product … unknown to GSE-Web — no order created

Cause
A line of the order carries a reference that does not exist in GSE-Web.
What to do
Create the product with the same reference (or tick “Take products from Odoo”), then “Replay”.

Order …: the unit of line … differs from the stock unit — no order created

Cause
The line is expressed in a unit other than the product's stock unit (for example dozens). No quantity is ever converted.
What to do
Correct the line in Odoo so that it is in the stock unit, then “Replay”.

Order …: product … is tracked by lot or serial number, not supported — no order created

Cause
A line carries a product tracked by lot or by serial number in Odoo.
What to do
Process this order directly in Odoo; the connector does not support these products.

Order …: currency … in Odoo, … in your organisation — no order created

Cause
The order's currency is not that of your organisation.
What to do
Use the organisation's currency for this order in Odoo, then “Replay”.

Order …: too old to be imported automatically

Cause
The order is more days old than the “Maximum age of a caught-up order” (30 by default), for example after a long pause.
What to do
If you still want to process it, “Replay” imports it; otherwise “Ignore”.

Order …: the customer is archived in GSE-Web — no order created

Cause
The partner matching the customer is archived in GSE-Web.
What to do
Reactivate the partner in GSE-Web, then “Replay”.

Order … cancelled in Odoo, but the order is already being handled: for the team to deal with

Cause
Someone is already handling the order: GSE-Web does not cancel it from under the team's feet.
What to do
Decide with the team whether to cancel the order or to serve it, then “Replay” or “Ignore”.

Order … changed in Odoo after being imported: the changes are not carried into the order

Cause
GSE-Web does not write into an order already created the changes made afterwards to the sales order.
What to do
Check the order and correct it by hand if needed, then “Ignore”.

Order …: already delivered outside GSE-Web — no order created

Cause
Odoo has already delivered this order by the time it arrives: an order would make the goods leave a second time.
What to do
Enter the matching stock issue in GSE-Web if it is not there, then “Ignore”.

Order …: import failed (reason)

Cause
The order could not be created; the reason is displayed.
What to do
Correct the cause shown, then “Replay”; if the point comes back, write to us.

Order cancelled in GSE-Web while order … stays open in Odoo

Cause
GSE-Web never cancels an order in Odoo.
What to do
Cancel the order in Odoo if needed, then “Ignore”.

Deliveries and stock

Delivery of order … refused by Odoo (reason)

Cause
Odoo did not accept the validation: order deleted in Odoo, order line missing from the sales order, or no quantity prepared.
What to do
Correct the cause shown in Odoo or in GSE-Web, then “Replay”.

Stock movement of product … refused by Odoo (reason)

Cause
Odoo refused the movement; the reason is displayed.
What to do
Check the integration user's “Inventory / User” rights and the product in Odoo. The point disappears when the movement goes out.

Product …: stock gap — GSE-Web …, Odoo …

Cause
GSE-Web's stock and Odoo's differ for this product. Nothing has been written.
What to do
Look for the origin of the gap. If GSE-Web is right, “Align Odoo on GSE-Web” sends Odoo a dated adjustment, after confirmation of the two quantities.

Purchases and receipts

Purchase order …: product … unknown to GSE-Web — no order created

Cause
A line of the purchase order carries a reference that is absent from GSE-Web.
What to do
Create the product with the same reference, then “Replay”.

Purchase order …: the unit of line … differs from the stock unit — no order created

Cause
The line is expressed in a unit other than the stock unit. No quantity is converted.
What to do
Correct the line in Odoo, then “Replay”.

Purchase order …: supplier not found in GSE-Web — no order created

Cause
No supplier partner in GSE-Web has the code of the order's supplier.
What to do
Create the supplier with the same code (or tick “Take partners from Odoo”), then “Replay”.

Purchase order …: currency differs from the organisation's — no order created

Cause
The order's currency is not that of your organisation.
What to do
Use the organisation's currency in Odoo, then “Replay”.

Purchase order …: product … is tracked by lot or serial number, not supported — no order created

Cause
A line carries a product tracked by lot or by serial number in Odoo.
What to do
Process this order directly in Odoo.

Purchase order …: too old to be imported automatically

Cause
The order is more days old than the “Maximum age of a caught-up order”.
What to do
“Replay” imports it despite its age; otherwise “Ignore”.

Purchase order … changed in Odoo after being imported: the changes are not carried over

Cause
GSE-Web does not carry over into a supplier order already created the changes made afterwards in Odoo.
What to do
Check the supplier order and correct it by hand if needed, then “Ignore”.

Purchase order …: import failed (reason)

Cause
The supplier order could not be created; the reason is displayed.
What to do
Correct the cause shown, then “Replay”; if the point comes back, write to us.

Receipt of purchase order … refused by Odoo (reason)

Cause
Odoo did not accept the validation of the receipt; the reason is displayed.
What to do
Correct the cause shown in Odoo or in GSE-Web, then “Replay”.

Pause, resume and changes

The connector can be switched off and back on at any time. Some changes have a rule, which the screen reminds you of and the server enforces.

“Pause”

Nothing is sent or imported any more, and nothing is lost.

“Resume”

The catch-up is started: orders placed during the pause are imported if they are less than N days old (“Maximum age of a caught-up order”, 30 by default). Older ones become points to handle.

Changing the server, the database, the key, the warehouse or the store

Under an active connection, these settings are locked. Follow this order: “Pause”, change, “Save”, “Test the connection”, “Resume”. To change server, “Disconnect” first: the automated actions of the old Odoo are removed. The API key must be entered again as soon as the server or the database changes.

“Disconnect”

After confirmation, the “GSE-Web” automated actions are removed from Odoo and the API key is erased. Nothing is deleted, neither in Odoo nor in GSE-Web: the orders, partners and supplier orders already created remain. If Odoo does not respond, the screen asks you to delete the “GSE-Web” actions yourself from within Odoo.

Reconnecting the same server

The orders, products and partners already linked are found again: no second order is created for an order already imported.

What predates activation

Orders and stock movements prior to activation are never replayed. The periodic pass re-reads the stock log a little way back so as not to lose anything, without ever going back beyond activation.

Choosing who is the product master

“Take products from Odoo” and “Send GSE-Web product records to Odoo” cannot be ticked together: ticking one unticks the other. Think about it before activating, to prevent one side from rewriting the other.

Closing the module

If KLS-Concept closes the module for your organisation, everything stops without anything being deleted. On reopening, the next pass catches up on the orders; the orders, partners and supplier orders already created remain ordinary ones.

Security and data

What the connector keeps, and how.

Encrypted API key

The API key is encrypted on the server (AES-256-GCM). It is write-only: never shown again, nor written to the logs, and entered again as soon as the server or the database changes.

Two-factor authentication

It is required to enter or replace the API key of an Odoo.

Public HTTPS only

The connector only calls the HTTPS address entered, on a public host; no redirect is followed and a private network address is refused.

Notifications on a secret address

Odoo does not sign its notifications. Each notification arrives on a secret address, and its content is never trusted: GSE-Web re-reads the record in Odoo before acting.

Movements without duplicates

Each stock movement carries a reference that lets GSE-Web check, before writing, that it is not already in Odoo. No quantity is ever overwritten, nothing is deleted in Odoo.

Traceability

Who connected Odoo, changed the key, suspended the synchronisation, and every write by GSE-Web into Odoo (delivery, receipt, movement, alignment) appear in the organisation's audit journal, never with the value of the key.

Troubleshooting

The message shown by the screen, and what to do. The code in brackets helps support find the case.

Stopped — check it

“Stopped by the server — check the key and test”

After five authentication refusals in a row (revoked key, deleted user, changed password), the server stops the connection so as not to keep insisting. Check the key in Odoo, enter a new one if needed, “Save”, “Test the connection”, then “Activate”.

Invalid server address: an HTTPS address, with no credentials or parameters, is expected

What to do
Enter the full address, starting with https://, with no credentials or parameters.
[ODOO_SERVER_URL_INVALID]

The server address points to a private network: Odoo must be reachable over the Internet

What to do
The connector only calls public servers. Use your Odoo's public address.
[ODOO_SERVER_URL_PRIVATE_HOST]

Enter the Odoo database before testing the connection

What to do
Fill in the name of the database the integration user connects to, save, then test.
[ODOO_DATABASE_REQUIRED]

Odoo refuses the API key: check the database, the login, the key and the integration user's rights

What to do
Check the database, the login and the API key, and that the integration user is active. Generate a new key if needed.
[ODOO_SERVER_AUTH_FAILED]

Odoo version not supported: Odoo 17, 18 and 19 are supported

What to do
The connector does not connect to any other version of Odoo.
[ODOO_SERVER_VERSION_UNSUPPORTED]

The integration user is not allowed to write in Odoo, while a ticked option writes there

What to do
Give it the “Inventory / User” rights, or untick the option that writes to Odoo.
[ODOO_SERVER_READ_ONLY]

This Odoo has several companies: choose the one to link

What to do
“Test the connection”, choose the “Odoo company”, then “Save”.
[ODOO_COMPANY_REQUIRED]

The Odoo company … does not exist

What to do
Test the connection again and choose a company from the list offered.
[ODOO_COMPANY_UNKNOWN]

The currency of the Odoo company (…) differs from the organisation's (…)

What to do
The connector only links a company in your organisation's currency.
[ODOO_SERVER_CURRENCY_MISMATCH]

Choose the store linked to Odoo

What to do
Choose the “GSE-Web store” to link, then “Save”.
[ODOO_WAREHOUSE_REQUIRED]

An exercise store cannot be linked to an Odoo

What to do
Choose a real store.
[ODOO_WAREHOUSE_EXERCISE_REFUSED]

Choose the Odoo warehouse linked to this store (test the connection to get the list)

What to do
“Test the connection”, choose the “Odoo warehouse”, “Save”, then “Activate”.
[ODOO_REMOTE_WAREHOUSE_REQUIRED]

The Odoo warehouse … does not exist, or does not belong to the chosen company

What to do
Test the connection again and choose a warehouse of the selected company.
[ODOO_REMOTE_WAREHOUSE_UNKNOWN]

Odoo is unreachable (…)

What to do
Check that your Odoo responds from the Internet, then try again.
[ODOO_SERVER_UNREACHABLE]

Odoo did not respond in time

What to do
Try again a little later.
[ODOO_SERVER_TIMEOUT]

Odoo is limiting calls: try again later

What to do
Be patient: the next pass resumes on its own.
[ODOO_SERVER_RATE_LIMITED]

Unreadable response from Odoo

What to do
Try again; if the message comes back, write to us with the code below.
[ODOO_SERVER_RESPONSE_INVALID]

Odoo refused the operation (code): Odoo's message

What to do
Read Odoo's message: it usually says what is missing (right, record, field). Correct it in Odoo, then try again.
[ODOO_REMOTE_ERROR]

Pause the connection before changing the server, the database, the API key or the warehouse

What to do
“Pause”, change, “Save”, “Test the connection”, “Resume”.
[ODOO_CONNECTION_ACTIVE_CHANGE_REFUSED]

Disconnect the current server first (its automated actions are still armed in Odoo) before entering another one

What to do
“Disconnect”, then enter the new server.
[ODOO_SERVER_CHANGE_REQUIRES_DISCONNECT]

The Odoo API key is required

What to do
Enter the API key. It must be entered again as soon as the server address or the database changes.
[ODOO_CREDENTIALS_REQUIRED]

Enable two-factor authentication on your account before entering the API key of an Odoo

What to do
Enable it in “My information” (the screen offers “Open ‘My information’”), then save again.
[ODOO_CONNECTION_TWO_FACTOR_REQUIRED]

Invalid connector settings

What to do
Most often: “Take products from Odoo” and “Send GSE-Web product records to Odoo” are ticked together. Keep only one.
[ODOO_SETTINGS_INVALID]

GSE-Web's and Odoo's stocks are already identical for this product

What to do
Nothing to do: the gap has already been closed.
[ODOO_STOCK_ALIGN_NOTHING_TO_DO]

The saved credentials can no longer be read on this server: enter them again

What to do
Enter the API key again, test, then activate.
[INTEGRATIONS_CREDENTIALS_UNREADABLE]

A synchronisation is already running for this connection: try again in a few moments

What to do
Wait for the current pass to finish.
[INTEGRATIONS_CONNECTION_BUSY]

Frequently asked questions

Is the Odoo connector available?

It is being rolled out: this page describes how it works, but it is not yet open to organisations. Write to us from the contact page if you would like to be notified when it opens.

Which Odoo versions are supported?

Odoo 17, 18 and 19. GSE-Web reads the version and chooses the protocol: JSON-RPC up to Odoo 18, JSON-2 from Odoo 19. Any other version is clearly refused, with no silent switching.

Who is the source of truth: GSE-Web or Odoo?

GSE-Web is the source of truth for physical stock, deliveries and receipts. Odoo keeps the products (or GSE-Web does, if you choose so), the partners, the sales and purchase orders, invoicing and accounting. Odoo never writes a physical quantity into GSE-Web: its stock is only read, in order to measure gaps.

Does GSE-Web's stock overwrite Odoo's?

No. Every receipt, adjustment, inventory or transfer goes out to Odoo as a stock movement, never as an overwritten quantity. A movement already present in Odoo is not sent again. A gap is measured every night and never corrected silently: “Align Odoo on GSE-Web” is an ADMIN action.

Do I have to activate everything?

No. Every exchange is an option, off by default: sales, deliveries, stock, gaps, purchases, receipts, products, partners, notifications. You tick only what you need, for example sales orders, stock and deliveries without purchases, or the other way round.

What happens if an order line causes a problem?

No order is created, never a partial order, and a point to handle explains why: unknown product, unit different from the stock unit, product tracked by lot or serial number, different currency. Correct the cause then “Replay”. No quantity is ever converted.

Are products with lots or serial numbers handled?

No. Products tracked by lot or by serial number in Odoo are refused, with a point to handle. Invoicing and accounting are not within the connector's scope either.

Are Odoo's variants taken in?

Yes, as independent simple products. The parent and child hierarchy of GSE-Web's variants is not taken in for the moment.

How long does it take for an order to arrive in GSE-Web?

Immediately if “Receive notifications from Odoo” is ticked and Odoo can call GSE-Web (“Automated Actions” module installed). Otherwise, at the latest at the next periodic pass (5 minutes by default, adjustable from 1 to 15).

And stock going to Odoo?

A few seconds after every change in the linked store, if “Send stock movements to Odoo in real time” is ticked. The periodic pass catches up on a send that may have been lost.

My Odoo is not reachable from the Internet. Is it possible?

No. The connector only calls public servers in HTTPS. On Odoo Online, external access only exists on the “Custom” plans.

What happens if I pause or disconnect?

When paused, nothing is sent or imported and nothing is lost; on resume, the orders placed in the meantime are caught up. On disconnection, the “GSE-Web” automated actions are removed from Odoo and the key is erased; the orders, partners and supplier orders already created remain, and reconnecting the same server does not create a second order.

Link your Odoo to GSE-Web

Ask to be notified when the connector opens for your organisation, or put your questions to us about your case.