Skip to main content

Otto Store Management

The ECOSIRE Otto Store Management module connects your OTTO Market partner account to Odoo ERP. It pushes your catalogue to OTTO (Products v5), imports and cancels orders (Orders v4), exports stock (Availability v1), processes returns (Returns v3) and reconciles receipts (Receipts v3) — every call addressed to OTTO's official Partner API, with an OWL dashboard in Odoo and support for more than one OTTO account and company.

Compatibility: Odoo 17/18/19 — Community and Enterprise; self-hosted or Odoo.sh. Odoo Online (SaaS) cannot install third-party modules. Current shipped version: 17.0 → 17.0.3.2.2, 18.0 → 18.0.3.2.2, 19.0 → 19.0.3.2.2 Price: $499 USD (one-time, per Odoo version) License: OPL-1 (Odoo Proprietary License)

The module installs and runs standalone — nothing to unlock and no separate companion module to install first. For the full installation and configuration reference, see the Otto Store Management guide.

Key Features​

  • OAuth2 client-credentials authentication — the documented POST /v1/token exchange, with a sandbox/production switch
  • Product catalogue export to OTTO (Products v5), sent asynchronously in batches of up to 500 variations per request, with task polling
  • Per-variation outcome confirmation — after a task finishes, the succeeded, unchanged and failed variation lists are read back and each product's sync status reflects what OTTO actually accepted, not merely that it was sent
  • Order import from OTTO (Orders v4) with cursor pagination, so no page is truncated or skipped
  • Order cancellations — whole-order and per-position, through OTTO's official cancellation endpoints
  • Stock and availability export (Availability v1), batched at 200 SKUs
  • Returns processing (Returns v3) — list, accept, and reject with OTTO's official rejection-reason enum
  • Receipts and financial reconciliation (Receipts v3) — list, detail and PDF, across purchase, refund and partial-refund types
  • Shipments and shipping profiles, including returns warehouses
  • Price reductions (Price-Reductions v1) for after-sales partial refunds
  • German-market compliance fields — LUCID EPR (VerpackG / ElektroG / BattG) and GDPR/DSGVO consent recorded on products and partners
  • 7 structured error classes with HTTP 429 / Retry-After handling, so throttling waits instead of failing the run
  • OWL dashboard with Chart.js KPIs; multi-account and multi-company

What's new in 3.2.1​

  • A finished product update no longer fails on its success path. When OTTO reported an export task as DONE, the read-back of that task's three result lists passed its arguments in the wrong order, so the poll raised TypeError the moment a task succeeded. The confirmation cycle added in 3.2.0 therefore failed exactly when it had good news to record. The calls now pass the arguments the helper declares.

3.2.0​

  • Outcome confirmation. After a product export task finishes, the connector reads OTTO's succeeded, unchanged and failed variation lists and sets each product's Otto Sync Status to what OTTO actually accepted. Previously every submitted product showed Synced as soon as it was sent, even when OTTO later rejected it.
  • Lowercase task states (pending / done) are handled the same as the uppercase spellings.
  • Partial reads survive — if one result list cannot be read, the others are still applied, and each variation status is written in its own savepoint.

3.1.0​

  • Removed the historical companion-module dependency. The module now installs and runs standalone; licensing is contractual under OPL-1.

What the OTTO Partner API does not offer​

So that you do not go looking for settings that do not exist, these are absent from OTTO's API and therefore absent from this module:

  • Webhooks — OTTO is poll-only. The module ships a /otto/webhook route that fails closed (HTTP 403) because no inbound payload to it could be authentic; there is nothing to register on the OTTO side. Sync runs on the module's scheduled actions.
  • A customer/consumer data API — buyer and address data is embedded in the order payload, so customers are created from imported orders.
  • A dispute API — disputes are handled in the OTTO Partner Portal interface.
  • Fulfilled-by-OTTO (FBO), reviews, messaging, advertising and analytics APIs.

Prerequisites​

  • Odoo 17, 18 or 19 (Community or Enterprise edition), self-hosted or Odoo.sh
  • An OTTO Market partner account with API access
  • API credentials from the OTTO Partner Portal (client ID and client secret)
  • Outbound HTTPS from your Odoo server to api.otto.market (and sandbox.api.otto.market while testing)

Installation​

  1. Download the module ZIP from your ECOSIRE dashboard or from your Odoo App Store purchase
  2. Extract it into your Odoo addons directory so that otto_store_management/__manifest__.py resolves
  3. Restart the Odoo service
  4. Navigate to Apps, click Update Apps List, search for "Otto Store Management" and click Install

Dashboard​

The OWL dashboard provides:

  • Sales overview — revenue, order count and average order value over time
  • Order lifecycle — the pipeline from imported order to delivered
  • Catalogue status — products by Otto Sync Status, including the variations OTTO rejected and why
  • Returns and receipts — return volume and the financial reconciliation position
  • Sync health — the outcome of recent sync runs, read from the module's own log records

Troubleshooting​

IssueSolution
Connection failedVerify the client ID and secret, and that Sandbox Mode matches where the credentials were issued
A product stays on Synced after a rejected updateYou are on an affected build — see What's new
Product rejected by OTTORead the task's failed-variation list and the log entry; OTTO's own error text names the missing or invalid attribute
Sync not runningCheck that the module's scheduled actions are enabled and that Odoo's cron worker is running
Orders not importingVerify the date range and the connection's sync_orders settings
Duplicate products or customersRun the initial import once; check existing records before re-running a half-finished import

Support​