Cdiscount Store Management
Connect your Cdiscount seller account to Odoo through the Octopia Seller API v2 — the REST API
that now serves Cdiscount. The module authenticates with OAuth 2.0 client credentials against
auth.octopia-io.net and sends the SellerId header on every call to
https://api.octopia-io.net/seller/v2. Synchronize your product catalog, import orders, follow the
48-hour accept/refuse window, and work returns — on France's second-largest e-commerce marketplace.
Compatibility: Odoo 17 / 18 / 19 (Community or Enterprise) Price: $499 (one-time, per Odoo version) Licence: OPL-1 — installs standalone, no activation step
| Technical name | cdiscount_store_management |
| Current shipped version | 17.0 → 17.0.2.2.3, 18.0 → 18.0.2.2.3, 19.0 → 19.0.2.2.3 |
Key Features
- Octopia Seller API v2 with OAuth 2.0 client credentials and the
SellerIdheader on every call - Product catalog import and mapping, with async imports tracked through the integration reports
- Order import with the Cdiscount acceptance deadline and the Accept / Refuse / Cancel on Cdiscount actions, so the 48-hour window is answered from Odoo
- A Seller Orders screen showing the orders as Cdiscount reports them
- A Returns screen for marketplace returns
- Inventory positions and per-seller stock references
- Invoice documents and the async report list
- Automatic retry with exponential backoff on 429/500/502/503/504, honouring
Retry-After - OWL dashboard with Cdiscount KPIs, a sales trend and an order-status breakdown
- Per-company isolation: 27 record rules keep each configuration inside its own company
Prerequisites
- Odoo 17, 18, or 19 (Community or Enterprise, self-hosted or Odoo.sh)
- A Cdiscount / Octopia seller account with API access
- Client ID, Client Secret and Seller ID from the Octopia seller portal
- The Python
requestspackage in the interpreter that runs Odoo
Installation
- Download the module ZIP for your Odoo series from your ECOSIRE dashboard, or from the Odoo App Store listing
- Extract it into your addons path:
unzip cdiscount_store_management_v19_*.zip -d /opt/odoo/addons/
- Restart Odoo:
sudo systemctl restart odoo
- Go to Apps, click Update Apps List
- Search for Cdiscount Store Management and click Install
There is no licence step: the module has no ECOSIRE licence module as a dependency.
Configuration
Step 1: Obtain your API credentials
In the Octopia seller portal, generate an API credential pair and note your Seller ID. Client ID and Client Secret are what the API authenticates with; the Seller ID travels as a header on every call. The older API Login / Password pair is no longer accepted by the platform.
Step 2: Connect in Odoo
- Go to Cdiscount → Configuration → Settings
- Create a configuration and enter:
- Client ID (
client_id) - Client Secret (
client_secret) - Seller ID (
seller_id) - Company (
company_id)
- Client ID (
- Click Test Connection to verify access — it probes the seller profile on
/sellersand reports what it found.
Step 3: Choose what syncs
The connection record carries the switches that gate automatic work: sync_products,
sync_orders, sync_customers, sync_inventory and their auto_sync_* counterparts. Turn them on
one at a time as you gain confidence.
Initial Sync
- Go to Cdiscount → Operations → Import Wizard
- Choose the data types to import (products, orders, customers, inventory)
- Run a small import first — a date range or a handful of products — and check the results
- Watch Cdiscount → Operations → Logs during the first full run; failures are recorded there rather than raised at the user
API Details
| Field | Value |
|---|---|
| Auth method | OAuth 2.0 client credentials (bearer token) |
| Token URL | https://auth.octopia-io.net/auth/realms/maas/protocol/openid-connect/token |
| Base URL | https://api.octopia-io.net/seller/v2 |
| Token grant | grant_type=client_credentials |
| Paging | pageIndex / pageSize, 1-based |
| Retry policy | 3 retries, 0.5 s backoff, on 429/500/502/503/504 |
| Key config fields | client_id, client_secret, seller_id |
Every route in the client was revalidated against Octopia's own published OpenAPI definition of the Sellers API — 88 published operations, of which this connector implements 50 on all three Odoo versions.
The module also serves its own routes in Odoo. /cdiscount/webhook is the one public endpoint (the
URL you register in the Cdiscount seller portal; it fails closed unless an active webhook record
verifies the delivery's signature). /cdiscount/api/status, /cdiscount/api/sync and
/cdiscount/dashboard/data back the dashboard and require a logged-in Odoo user — they are not
public and answer only for the companies that user may see. The full detail is on the
installation and configuration guide.
Dashboard
The built-in OWL dashboard shows your integration at a glance:
- KPI cards — revenue, orders, customers, products, average order value and sync health, each with a period-over-period delta
- Sales trend (Chart.js line chart) with date filtering
- Order status breakdown (doughnut chart)
- Period filters — today, 7 days, 30 days, 90 days, year, or a custom range
- Recent activity from the sync log
- Quick actions for products, orders, customers, queue, logs and settings
- Auto-refresh every 60 seconds, and it follows Odoo's dark mode (since 2.2.3)
Troubleshooting
| Issue | Solution |
|---|---|
| Connection failed | Re-check Client ID, Client Secret and Seller ID. A sandbox credential against production (or the reverse) is the usual cause |
| Sync not running | Check Settings → Technical → Scheduled Actions and that Odoo's cron worker is running |
| Duplicate products | Review the product mapping records; ensure SKU matching is configured |
| Orders not importing | Check the order status filters and the date range |
| Token rejected | The module acquires a fresh token when one expires; verify the Client ID and Secret are still valid in the Octopia portal |
| Product rejected by Cdiscount | Check the required fields (EAN, description length, category code) |
| Refund a return | Cdiscount publishes no seller-side refund operation. Refund in the Cdiscount seller portal, then set the return's state to Refunded in Odoo |