Skip to main content

eMAG Store Management

This is the installation and configuration guide for eMAG Store Management, the module you downloaded from your ECOSIRE dashboard. Everything on this page describes the emag_store_management module exactly as it ships today — the facts below were read out of the released build, not from a roadmap.

Technical nameemag_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.0 → 17.0.2.1.2, 18.0 → 18.0.2.1.2, 19.0 → 19.0.2.1.2
Price$1,499 USD — one-time, per Odoo version
Odoo module licenceOPL-1
CategoryConnector
Served marketsRomania (eMAG.ro), Bulgaria (eMAG.bg), Hungary (eMAG.hu)

Requirements​

RequirementDetail
Odoo17.0, 18.0 or 19.0, Community or Enterprise. Self-hosted or Odoo.sh — Odoo Online (SaaS) cannot install third-party modules
Odoo appsbase, sale_management, stock, account, delivery, mail, web, portal, product, contacts, digest — Odoo installs any that are missing
Python packagesrequests
Platform accountAn eMAG Marketplace seller account with API access (API username and API password)

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, then pick the file for the Odoo version you actually run. Each version is sold separately and the builds are not interchangeable.

2. Extract into your addons path​

unzip emag_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/emag_store_management/__manifest__.py # sanity check

The module must end up as a single top-level emag_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
  1. Go to Apps and click Update Apps List (developer mode must be on).
  2. Search for eMAG Store Management and click Install.
  3. Odoo pulls in the Odoo apps listed above automatically.

When the install finishes, an eMAG menu appears in the main Odoo app switcher.

Configuration​

Connect to eMAG​

Create a connection record under eMAG → Configuration → Instances. The fields the module defines for the connection are:

FieldTechnical nameTypeRequired
Instance NamenameCharYes
API UsernameusernameCharYes
API Passwordpassword_keyCharYes
Companycompany_idMany2oneYes
Marketmarket_code (or market_id)Selection / Many2oneNo — defaults to Romania
Vendor IDvendor_idCharNo
Shop URLshop_urlCharNo
API Keyapi_keyCharNo
Shared Secretshared_secretCharNo
PasswordpasswordCharNo
API Base URLapi_base_urlCharNo — derived from the market

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.

API Username and API Password are the credentials the connector sends (HTTP Basic, as eMAG documents). They are restricted to the system group, so an ordinary user cannot read them.

The market decides the host, the currency and the compliance pack. Three markets are served:

MarketHostCurrencyCompliance
Romaniamarketplace-api.emag.roRONRO e-Factura
Bulgariamarketplace-api.emag.bgBGNBG NRA
Hungarymarketplace-api.emag.huHUFHU NAV Online Számla

Poland is selectable but is not served. No HTTPS listener answers on marketplace-api.emag.pl and eMAG's own OpenAPI document publishes no .pl server, so the client refuses a Polish connection instead of failing every call silently. Leave the market on a served value.

The same record carries 3 automation switches — 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: marketplace-api.emag.ro, marketplace-api.emag.bg, marketplace-api.emag.hu. Your firewall must allow outbound HTTPS to them.

The one route the module serves itself​

emag_store_management exposes a single HTTP route, and it is not an OAuth flow:

RouteMethodAuthWhat it does
/emag/connectGETlogged-in userRedirects to the eMAG instance configuration form (optionally to one instance, via ?instance_id=<id>), so a link can take an operator straight to where the credentials are entered

eMAG's Marketplace API authenticates with HTTP Basic (API username + API password). There is no authorization-code exchange and no access token to fetch, on any eMAG market domain.

Scheduled actions​

The module installs 13 scheduled actions (Settings → Technical → Scheduled Actions):

Scheduled actionRuns everyEnabled on install
eMAG: Sync Products30 minutesYes
eMAG: Sync Orders15 minutesYes
eMAG: Sync Customers60 minutesYes
eMAG: Sync Inventory10 minutesYes
eMAG: Process Queue Jobs5 minutesYes
eMAG: Import Payout Reports6 hoursYes
eMAG: Import Refunds30 minutesYes
eMAG: Auto Risk Detection30 minutesYes
eMAG: Generate Analytics4 hoursYes
eMAG: Webhook Health Check60 minutesYes
eMAG: Cleanup Old Logs24 hoursYes
eMAG: Process Workflows10 minutesYes
eMAG: Daily Summary Report1 dayYes

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:

  • eMAG → Dashboard
  • eMAG → Orders
  • eMAG → Products
  • eMAG → Customers
  • eMAG → Finance — Refunds, Payouts
  • eMAG → Analytics
  • eMAG → Operations — Run Operations, Queue Jobs, Logs
  • eMAG → Configuration — Instances, Carriers, Locations, Payment Gateways, Scheduled Actions, Webhooks, Markets (RO/BG/HU), Easybox Lockers (RO)
  • eMAG → Compliance — RO e-Factura Reports

A normal first run is:

  1. Save the connection record and confirm the module reports a successful connection before importing anything. A failed test leaves the connection in the error state and shows you eMAG's own message.
  2. Review the mapping records so imported data lands on the right Odoo records.
  3. 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.
  4. Watch the log records during the first full sync. Failures are recorded there rather than raised at the user.

What the connector calls​

The connector is bound to eMAG's published OpenAPI document (version 4.5.2). It calls 41 documented operations — orders, products and offers, stock, categories, AWB shipping labels, invoices and VAT reads, campaigns, smart deals and the returns/RMA webhook surface — and it calls nothing eMAG does not publish. An operation the platform does not serve is refused locally rather than sent and guessed at.

Version history​

Odoo versionVersion you download today
17.017.0.2.1.2
18.018.0.2.1.2
19.019.0.2.1.2

ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.1.2 is the Odoo 19 build of module version 2.1.2. Your installed version is shown in Apps.

2.1.2​

  • The dashboard follows Odoo's dark theme. In dark mode the page, the cards and the chart labels now use dark colours instead of staying light.
  • The Order Status chart draws. It could stay a blank circle with only its legend; both charts are now built from the loaded figures.
  • Empty, loading and error states explain themselves. A period with no sales or orders says so inside each chart, the first load shows a placeholder layout instead of a row of zeroes, and a failed load shows an error at the top of the page with a Try again button.
  • Lists fit a phone. Orders, customers, queue jobs, logs, payouts, webhooks and connections lead with short headers and a status badge; secondary columns sit behind the optional-columns toggle, and a long store name on the dashboard is shortened with an ellipsis.
  • Analytics shows its figures. The analytics list now shows the period, dates, orders, sales, average order and status instead of the report name alone.

2.1.1​

  • eMAG OpenAPI 4.5.2 coverage — four campaign read operations added against the vendor's current document, and the catalogue reconciled with the live router so nothing is offered that eMAG answers 404 for.
  • Courier accounts are company-scoped. A courier account now belongs to one connection and that connection's company, with the code unique per company. Previously the record rule filtered by an optional mapped delivery carrier, which hid every unmapped account from non-manager users.
  • A failed connection test is recorded. A test that fails now leaves the connection in the error state and surfaces the platform's own message, instead of appearing to succeed.
  • The dashboard no longer writes. Opening a dashboard period computed and assigned date fields on the connection record — a read that mutated data. The KPIs are now computed by a pure helper, and a bad custom period falls back without raising.
  • Dead weight removed. ApexCharts was loaded on every backend page and used by nothing; it and two unreferenced data files are gone from the bundle.
  • Click a chart and you get the records. Both dashboard charts now open the eMAG orders behind the point or segment you click, for the same period and connection the figure was computed from.

Troubleshooting​

Connecting and syncing​

SymptomLikely cause
The connection will not validateRe-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).
The connection reports an authentication failureeMAG rejected the API username/password combination. A 401 and a 403 are reported distinctly, so you can tell a wrong credential from a credential that lacks rights for that operation.
Nothing syncs even though the connection is fineThe 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-wayRead 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.
Sync reports throttlingThe client already applies a sliding-window limit and retries a 429 for the wait the platform asks for. If you still see it, lengthen the interval rather than retrying harder.
Records import but map to the wrong Odoo valuesFix the mapping records under the module's configuration, then re-run the import.
Duplicated products or customersRun the initial import once. If a first attempt half-finished, check the existing records before re-running rather than importing on top. Re-imports update the record they created; a buyer is matched to the existing contact.
A connection in Poland fails every callPoland is not served through this API. Switch the market to Romania, Bulgaria or Hungary.

Support​