Bold Commerce Store Management
This is the installation and configuration guide for Bold Commerce Store Management, the module you downloaded from your ECOSIRE dashboard or the Odoo App Store. Everything on this page describes the boldcommerce_store_management module exactly as it ships today — the facts below were read out of the released build, not from a roadmap.
| Technical name | boldcommerce_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.1.1.0, 18.0 → 18.0.1.1.0, 19.0 → 19.0.1.1.0 |
| Price | $349 USD — one-time, for the Odoo 19 build (each series is priced separately, see Version history) |
| Odoo module licence | OPL-1 |
| Category | Connector |
Each Odoo major version is a separate product — the 17.0, 18.0 and 19.0 builds are purchased and downloaded separately. Buy the build that matches the version you actually run.
No activation step
This module installs and runs standalone. There is no licence key to activate, no separate licence module to install, and no activation screen anywhere in Settings — after installation the connector is ready to configure. The module licence (OPL-1) is part of your purchase: it is the contract under which you may use the software, and it requires nothing to be typed into Odoo.
If you are upgrading from an older build that depended on the separate ecosire_license_client module: that dependency no longer exists. Odoo upgrades the connector on its own, and the licence client is simply no longer used by it — you can leave it installed or remove it, provided no other module you run still needs it.
Requirements
| Requirement | Detail |
|---|---|
| Odoo | 17.0, 18.0 or 19.0, Community or Enterprise. Self-hosted or Odoo.sh — Odoo Online (SaaS) cannot install third-party modules |
| Odoo apps | base, sale_management, stock, account, delivery, mail, web, portal, product, contacts, digest — Odoo installs any that are missing automatically |
| Python packages | requests |
| Platform account | A Bold Commerce account with API access |
Install the Python packages into the same interpreter that runs Odoo:
sudo -u odoo pip install requests
Installation
1. Download the ZIP for your Odoo version
Sign in at ecosire.com and open your dashboard downloads, or download the build for your series from the Odoo App Store. Pick the file that matches the Odoo version you run — a 19.0 ZIP will not install on an Odoo 17 database.
2. Extract into your addons path
unzip boldcommerce_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/boldcommerce_store_management/__manifest__.py # sanity check
The module must end up as a single top-level boldcommerce_store_management/ directory with __manifest__.py directly inside it. If your ls check fails, the folder landed one level too deep or too shallow — move it so the path above resolves.
3. Restart Odoo and install
sudo systemctl restart odoo
- Go to Apps and click Update Apps List (developer mode must be on).
- Search for Bold Commerce Store Management and click Install.
- Odoo pulls in the Odoo apps listed above automatically.
When the install finishes, a Boldcommerce menu appears in the main Odoo app switcher.
Configuration
Connect to Bold Commerce
Create a connection record on the boldcommerce.instance model (Boldcommerce → Configuration → Instances). The fields the module defines for the connection are:
| Field | Technical name | Type | Required |
|---|---|---|---|
| Instance Name | name | Char | Yes |
| Boldcommerce Shop URL | shop_url | Char | Yes |
| Company | company_id | Many2one | Yes |
| API Key / Client ID | api_key | Char | No |
| API Password | password | Char | No |
| Client Secret | shared_secret | Char | No |
| Access Token | access_token | Char | No |
The fields marked Yes are enforced by the model — Odoo will not let you save the record without them. The technical name is the reliable identifier if your screen wording differs.
Notes on the credential fields:
- API Password is a legacy field — Bold Commerce deprecated private app passwords in 2022. It is only read when no access token is set; new connections should not need it.
- Access Token is obtained automatically through the OAuth handshake described below, or manually from a Custom App in your Bold Commerce admin.
- Credential fields are visible only to system administrators and are stored as secrets.
The same record carries 4 behaviour checkboxes — auto_validate_inventory, auto_confirm_order, auto_create_invoice, auto_validate_invoice. They gate what the module is allowed to do automatically once it is connected. Leave anything you are not ready for switched off, and turn them on one at a time.
The module's own source contacts these hosts: developer.boldcommerce.com and api.boldcommerce.com, plus your own shop domain during the OAuth handshake. Your firewall must allow outbound HTTPS to them.
Set your public URL first
The OAuth flow builds its redirect URI from Odoo's base URL, so set it before connecting:
- Turn on developer mode.
- Settings → Technical → System Parameters, find
web.base.url. - Set it to the real HTTPS URL your users browse to, e.g.
https://erp.example.com.
If this is left at a placeholder, Bold Commerce is handed a redirect URI that points nowhere and the handshake cannot complete.
Public endpoints this module exposes
The connector serves six externally reachable endpoints, all relative to your Odoo base URL (web.base.url). Two carry out the OAuth handshake; four receive real-time webhooks from Bold Commerce.
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/boldcommerce/install | GET | Public (unauthenticated) | Entry point for the install / connect request coming from your Bold Commerce admin. It resolves the shop to a saved connection record and redirects the browser on to the Bold Commerce authorization screen. |
/boldcommerce/callback | GET | Public (unauthenticated) | OAuth redirect target — Bold Commerce sends the authorization code here and the module exchanges it for an access token. Register https://erp.example.com/boldcommerce/callback as the redirect URI in your Bold Commerce app. |
/boldcommerce/webhook/product | POST | Public (HMAC-verified) | Receives product updates from Bold Commerce and queues a product import job. |
/boldcommerce/webhook/order | POST | Public (HMAC-verified) | Receives order events and queues an order import job. |
/boldcommerce/webhook/customer | POST | Public (HMAC-verified) | Receives customer events and queues a customer import job. |
/boldcommerce/webhook/refund | POST | Public (HMAC-verified) | Receives refund events and queues a refund import job. |
Connecting through OAuth. Create the connection record first with at least the Shop URL, API Key and Client Secret filled in. Then start the connection from your Bold Commerce admin — the app's launch URL is https://<your-odoo>/boldcommerce/install?shop=<your-shop-domain>. /boldcommerce/install refuses a shop domain it cannot match to a saved boldcommerce.instance record, verifies the HMAC when Bold Commerce sends one, and issues a single-use state nonce before redirecting to the authorization screen. /boldcommerce/callback re-verifies the HMAC, rejects a state that does not match the nonce just issued, and refuses a request that carries no authorization code. When the checks pass, the token is stored on the connection record and its state becomes connected; a failure at any check ends the handshake on an error page and no token is stored.
Webhooks. Point Bold Commerce's product, order, customer and refund webhooks at the four /boldcommerce/webhook/... URLs above. Every webhook request must carry two headers:
X-Boldcommerce-Shop-Domain— the shop the event belongs to. The module matches it against the Shop URL of your saved connection records to find the right one.X-Boldcommerce-Hmac-SHA256— a Base64 HMAC-SHA256 signature of the raw request body, computed with that connection's Client Secret.
A verified webhook is not imported on the spot: the payload is stored as a pending queue job (Boldcommerce → Operations → Queue Jobs) and a receipt is written to the module log. The Process Queue Jobs scheduled action (every 5 minutes by default) picks the jobs up, so the data lands in Odoo within minutes of the event. A request whose shop domain matches no connection, or whose signature does not verify, is rejected — nothing is imported — and the reason is recorded in Boldcommerce → Operations → Logs.
Scheduled actions
The module installs 13 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| Boldcommerce: Sync Products | 30 minutes | Yes |
| Boldcommerce: Sync Orders | 15 minutes | Yes |
| Boldcommerce: Sync Customers | 60 minutes | Yes |
| Boldcommerce: Sync Inventory | 10 minutes | Yes |
| Boldcommerce: Process Queue Jobs | 5 minutes | Yes |
| Boldcommerce: Import Payout Reports | 6 hours | Yes |
| Boldcommerce: Import Refunds | 30 minutes | Yes |
| Boldcommerce: Auto Risk Detection | 30 minutes | Yes |
| Boldcommerce: Generate Analytics | 4 hours | Yes |
| Boldcommerce: Webhook Health Check | 60 minutes | Yes |
| Boldcommerce: Cleanup Old Logs | 24 hours | Yes |
| Boldcommerce: Process Workflows | 10 minutes | Yes |
| Boldcommerce: Daily Summary Report | 1 day | Yes |
Intervals above are the shipped defaults. Adjust them to your volume — but be aware that the platform, not Odoo, sets the API rate limits, and shortening a sync interval is the usual cause of throttling errors in the logs.
Using the module
The module's menu is laid out as:
- Boldcommerce → Dashboard
- Boldcommerce → Orders
- Boldcommerce → Refunds
- Boldcommerce → Products
- Boldcommerce → Customers
- Boldcommerce → Payouts
- Boldcommerce → Analytics
- Boldcommerce → Operations — Run Operations, Queue Jobs, Logs
- Boldcommerce → Configuration — Instances, Locations, Payment Gateways, Scheduled Actions, Webhooks
A normal first run is:
- Save the connection record and complete the OAuth handshake before importing anything.
- Review the mapping records so imported data lands on the right Odoo records.
- Run a small import first — restrict it by date or by a handful of products — and check the results before letting the scheduled actions take over.
- Watch the log records during the first full sync. Failures are recorded there rather than raised at the user.
Troubleshooting
Syncing
| Symptom | Cause and fix |
|---|---|
| The connection will not validate | Re-check every required field in the table above. Most failures are a mistyped secret, or credentials created for a sandbox while the module points at production (or vice-versa). |
| Nothing syncs even though the connection is fine | The scheduled actions are disabled at the Odoo level, or Odoo's cron worker is not running. Check Settings → Technical → Scheduled Actions and that --max-cron-threads is greater than zero. |
| Sync starts then stops part-way | Read the module's log records for that run. Rate limiting and rejected field values are the two common causes; both are logged with the platform's own error text. A single malformed record no longer aborts the run (see Version history) — it is skipped and logged, and the rest of the batch imports. |
| Records import but map to the wrong Odoo values | Fix the mapping records under the module's configuration, then re-run the import. |
| Duplicated products or customers | Run the initial import once. If a first attempt half-finished, check the existing records before re-running rather than importing on top. |
Webhooks
| Symptom | Cause and fix |
|---|---|
| Webhooks are rejected or never import | Each webhook must carry X-Boldcommerce-Shop-Domain matching a saved connection's Shop URL, and a valid X-Boldcommerce-Hmac-SHA256 signature computed with that connection's Client Secret. Check Boldcommerce → Operations → Logs — every rejection is recorded there with its reason. |
| Verified webhooks import late | Webhook payloads are queued and processed by the Process Queue Jobs scheduled action. If imports lag, check that this action is enabled and watch Boldcommerce → Operations → Queue Jobs for stuck jobs. |
Version history
| Odoo version | Version you download today |
|---|---|
| 17.0 | 17.0.1.1.0 — $249 USD |
| 18.0 | 18.0.1.1.0 — $249 USD |
| 19.0 | 19.0.1.1.0 — $349 USD |
ECOSIRE module versions are <odoo major>.0.<module major>.<minor>.<patch>, so 19.0.1.1.0 is the Odoo 19 build of module release 1.1.0. Your installed version is shown on the module's page in Apps.
What the recent releases change for you as a user:
- 1.1.0 (all series) — nothing to activate. The module no longer depends on the separate
ecosire_license_clientmodule, so installation is a single ZIP: no licence key, no activation screen, no daily licence re-verification running in the background. Every capability that used to sit behind the licence check is still there and now runs without it. See No activation step. - 1.0.13 — a bad record can no longer lose a whole sync run. When Bold Commerce returns one malformed or unexpected record in a batch, the module now isolates it: that record alone is rolled back and written to the logs, and every other record in the batch still imports. Before this change a single bad record could abort the run, roll back records that had already imported, and still leave the log claiming success.