Skip to main content

Lazada Store Management

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

Technical namelazada_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.017.0.2.0.3, 18.018.0.2.0.2, 19.019.0.2.1.2 (checked against the published builds on 17 September 2026)
Price$499 USD — one-time, per Odoo version
Odoo module licence19.0OPL-1, 17.0 / 18.0LGPL-3
Licence key19.0 → not required, 17.0 / 18.0 → required
CategoryConnector
Odoo 19 needs no licence key

From 19.0.2.1.0 the Odoo 19 build no longer depends on ecosire_license_client and contains no activation check: you install the ZIP and the module works. Your rights are governed by the OPL-1 licence it ships under, and support and updates still follow your purchase.

Two crons that previously skipped themselves when no licence was verified — the customer sync and the connection test — now simply run whenever they are scheduled.

The Odoo 17 and 18 builds are still on the earlier packaging: they require the free licence client module and an activation key. Everything in Activate your licence applies to those two versions only.

Upgrading an Odoo 19 database from a 2.0.x build? You may uninstall ecosire_license_client afterwards, unless another ECOSIRE module in the same database still needs it.

You buy per Odoo major version

Each Odoo major version is a separate product: your purchase entitles you to the download for the Odoo version you bought, and on Odoo 17 and 18 a licence issued for one major version will not activate on another. Buy the version you actually run, and if you later upgrade Odoo you need the build for the new version.

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, product, contacts, mrp — Odoo installs any that are missing
ECOSIRE dependencyOdoo 17 / 18: ecosire_license_client — a separate free download, not bundled in this ZIP. See step 3. Odoo 19: none
Python packagesrequests
Platform accountA Lazada account with API access
LicenceYour purchase for this module and your Odoo version. On Odoo 19 no key is entered in Odoo

mrp is required because the connector maps Lazada combo listings onto Odoo bills of materials.

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. You will only be offered the file matching your purchase's Odoo version — that is expected, see the warning above.

2. Extract into your addons path

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

The module must end up as a single top-level lazada_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. Install the ECOSIRE licence client (Odoo 17 and 18)

Skip this step on Odoo 19 — that build has no ECOSIRE dependency.

On Odoo 17 and 18, lazada_store_management declares ecosire_license_client as a hard dependency, so Odoo will refuse to install this module until the licence client is present in your addons path. The licence client is a separate, free module and is not bundled in this ZIP. Download it from your ECOSIRE dashboard alongside the connector and extract it the same way:

unzip ecosire_license_client_v18_*.zip -d /opt/odoo/addons/
If the licence client is not in your dashboard

The licence client is distributed separately from the connector archives. If you cannot see it in your downloads, email info@ecosire.com with your licence key and we will send it to you — do not try to install the Odoo 17 or 18 connector without it, because Odoo will simply refuse.

4. 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 Lazada Store Management and click Install.
  3. Odoo pulls in the Odoo apps listed above automatically — plus ecosire_license_client on Odoo 17 and 18.

When the install finishes, a Lazada menu appears in the main Odoo app switcher.

Activate your licence (Odoo 17 and 18)

Odoo 19 does not use a licence key; skip this whole section.

Where your licence key comes from

  • Bought on ecosire.com — the key is issued to your ecosire.com dashboard automatically at checkout; find it under your account's licences.
  • Bought on the Odoo App Store — create (or sign in to) your account at ecosire.com, then email info@ecosire.com with the Odoo sales order reference from your purchase confirmation (the order slip Odoo sent you). The App Store does not tell us who bought what, so this is how we match the purchase to your account. We verify it and issue the licence to your dashboard, usually the same day.
  • Tell us which Odoo major version you run when you send proof of purchase — the key is issued against the version you bought.

Before you activate

Set your instance's public URL first. The licence is bound to the domain derived from web.base.url, so activating with a placeholder value binds the licence to the wrong host:

  1. Turn on developer mode.
  2. Settings → Technical → System Parameters, find web.base.url.
  3. Set it to the real HTTPS URL your users browse to, e.g. https://erp.example.com.

Activate

  1. Go to Settings → ECOSIRE.COM → Activate License.
  2. Paste your licence key.
  3. Choose Lazada Store Management in the module dropdown (it lists the installed ECOSIRE modules).
  4. Click Activate.

Settings → ECOSIRE.COM → License Status then shows, per module, the licence state, last-verified time, Odoo version, module version, support expiry, and whether an offline token is cached.

What the client sends

Activation and validation are HTTPS JSON calls to https://api.ecosire.com/api. Every request carries the same five fields:

{
"key": "ECO-XXXX-XXXX-XXXX-XXXX",
"module_name": "lazada_store_management",
"domain": "erp.example.com",
"hw_fingerprint": "<sha256 of this installation's hardware/db identity>",
"odoo_version": "18.0"
}
EndpointUsed for
POST /api/licenses/activateFirst-time activation — binds the licence to this domain
POST /api/licenses/validateOngoing verification
POST /api/licenses/issue-tokenFetches the signed offline token used for the grace period
POST /api/licenses/deactivate-selfReleases this domain so the key can move to another database

The base URL is overridable through the ecosire.license.api_url system parameter. You do not need to change it.

Activation slots, and moving between databases

Each licence carries its own activation limit, and new licences default to a single domain. Some licences are issued with more. Do not assume a number — check Settings → ECOSIRE.COM → License Status, or the licence detail page in your ECOSIRE portal, for the limit on yours. Re-activating on a domain that is already bound is a no-op success, not a second slot.

  • To move a live licence to a different database, use Deactivate on the activation screen first; that releases the domain server-side so you can activate elsewhere.
  • Ten failed activation attempts within one hour trips a client-side rate limiter. Wait up to 60 minutes, or contact support — do not keep retrying a key you are unsure about.

Staying licensed after activation

A daily scheduled action, ECOSIRE License: Background Re-verification, re-checks the licence out of the request path, refreshes the cached offline token, and keeps the last-known-good timestamp fresh. Because of that, a transient network problem or a worker restart does not lock you out. Verification results are cached for five minutes, so a licence change can take a few minutes to show up.

If you see a hard rejection instead — LICENSE_NOT_FOUND, LICENSE_INACTIVE, LICENSE_EXPIRED, MODULE_MISMATCH, VERSION_MISMATCH or NOT_ACTIVATED_ON_DOMAIN — the grace period is deliberately not granted; fix the underlying problem. See Troubleshooting.

Configuration

Connect to Lazada — step by step

This section was rewritten on 17 September 2026 from a fresh installation of the current Odoo 19 build (19.0.2.1.2) and from Lazada Open Platform's own Register Roles, Create an App, Understanding the parameters in the app, Configure seller authorization and Seller authorization introduction pages as they read on that date (last updated by Lazada between 5 March and 23 June 2026). It has two halves: what you do on Lazada Open Platform, then what you do in Odoo.

Read before you rely on Test Connection in this build

While preparing this guide we verified the 19.0.2.1.2 build against Lazada's live API and found that its request signing does not follow Lazada's current scheme, so Lazada answers every call with MissingParameter — and because the build's Test Connection only checks that Lazada answered, it reports Connection successful even with empty credentials. A corrected build is being prepared and every buyer receives it as a free update. Do Half A now (it is needed whichever build you run) and write to info@ecosire.com: integration support is included with your purchase and we connect and verify the shop for you on the corrected build at no charge.

Half A — Lazada Open Platform

Lazada's developer console is Lazada Open Platform, https://open.lazada.com (one console for all six markets — Singapore, Malaysia, Thailand, Indonesia, Vietnam and the Philippines).

A1. Register and choose a role. Click Sign up on the Open Platform homepage and create the account, then register a role. A seller integrating its own shop chooses Software Developer ("if you need to integrate the Lazada Open API to query or update information in your store"); fill the registration page and click Completed (the logo must be exactly 200×200 px). Do not choose Service Provider — that role is for vendors selling software to other sellers and cannot be changed afterwards.

A2. Apply for the app category and create the app. Open App Management and click Create App. Under the Enterprise/Personal Self-Developed partner type locate Seller In-house APP, click Apply and give a reason. Lazada usually reviews the application the same working day. When the category shows Active, click it, then Create App at the bottom right, fill the form and click Confirm. Two fields to get right:

  • Callback URL — enter your Odoo instance's address, for example https://<your-odoo-host>/. It can be edited later; it must start with https://. The authorization link you build in A4 must use exactly this address or Lazada refuses with Redirect uri does not match the callback URL of the app.
  • App Logo — exactly 120×120 px.

A3. Read the app parameters. The app's details page shows:

Lazada labelOdoo fieldNotes
App KeyApp KeyThe identifier every request carries
App SecretApp SecretKeep it on the server; never paste it into a support thread
App StatusTesting allows 10,000 calls a day and issues shorter-lived access tokens; click Apply Online (upper right) only when you are done testing — it is irreversible
Authorization Information / Authorized Seller WhitelistSee A4
IP WhitelistOptional; if you fill it, add your Odoo server's public IPv4 address (IPv6 is not supported)

A4. Whitelist the seller and authorize the shop. A Seller In-house APP uses Lazada's Allow binding user to authorize policy: only sellers listed in the app's Authorized Seller Whitelist can authorize it. On the app's details page (or App Management → Auth Management) click Add under Authorized Seller Whitelist and enter the shop's Seller ID — the short code shown at the top left of Seller Center → Settings — the Seller Center login email and password, and the Country of the store. Then open the authorization link in a browser:

https://auth.lazada.com/oauth/authorize?response_type=code&force_auth=true&redirect_uri=https://<your-odoo-host>/&client_id=<App Key>

On Lazada's page select the store's site (Thailand, Malaysia, …, or Crossborder for a cross-border seller authorizing all sites), click Use Seller Login, sign in to Seller Center with the store's credentials (not a QR code — QR login is not accepted here), confirm the email shown under My Account is the store's, and click Authorize. Lazada redirects the browser to your callback address with the code in the query string:

https://<your-odoo-host>/?code=0_100132_Cl3VmMr6W6YC6cx6swxFAZ0l825

Copy the code. It must be exchanged within 30 minutes.

A5. Exchange the code for tokens. Call Lazada's GenerateAccessToken endpoint, https://auth.lazada.com/rest/auth/token/create, with code, app_key, timestamp (milliseconds), sign_method=sha256 and sign (HMAC-SHA256 with the App Secret over the API path followed by the sorted parameters, upper-case hex). The response carries the access_token (expires_in, 7 days for an online app — shorter while the app is in Testing), the refresh_token (refresh_expires_in, 30–50 days), the store's country, and country_user_info with the seller_id and short_code of each authorized store. If you would rather not run this yourself, send us the code the moment you have it and we run the exchange for you.

A6. Renewal. The access token is renewed with the refresh token at /auth/token/refresh; when the refresh token itself expires the seller must authorize again (repeat A4–A5). Lazada also stops sending push notifications while the access token is invalid.

Half B — Odoo (19.0.2.1.2)

Sign in as a user who is a Lazada Manager (Settings → Users → the user → Lazada access field). Managers see the Configuration and Operations menus.

B1. Open the configuration list. From the Odoo apps menu open Lazada, then Configuration → Settings, and click New. One record is one store.

B2. Fill the Connection group.

FieldValue
Configuration NameAny name, e.g. the store's trading name
App KeyFrom the app's details page (A3)
App SecretFrom the app's details page (A3) — the field is shown to Odoo administrators only
Access TokenFrom the token exchange (A5) — administrators only
Refresh TokenFrom the token exchange (A5) — administrators only
RegionThe store's site: Singapore, Malaysia, Thailand, Indonesia, Vietnam or Philippines. This selects the API gateway (api.lazada.co.th for Thailand, and so on)
Timeout (seconds)Leave at 30
Company (in the Status group)The Odoo company that owns this store's orders and stock

Lazada URL can stay empty — the region chooses the gateway.

B3. Save, then click Test Connection in the form header. In the corrected build this calls Lazada's Get Seller with the stored token and sets Connection Status to Connected or Error with Lazada's reply in Connection Error Message. In 19.0.2.1.2 the result is not a verification of the credentials — see the note at the top of this section. Operations → Test Connection offers the same check as a wizard.

B4. Choose what synchronizes — the Synchronization tab. Data Types (Sync Products, Sync Orders, Sync Customers, Sync Inventory) decide which areas the connector may touch; Auto Sync Customers and Sync Frequency decide whether the scheduled customer sync picks the store up. Product and order synchronization in this build is run by you, from Operations → Import Wizard and Export Wizard; there is no scheduled product or order import.

B5. First synchronization. Use Operations → Import Wizard (choose the data types and, for orders, the date range), then review Products, Orders and Customers. Settlements are loaded from Operations → Import Settlement.

B6. Where errors show. Connection Status / Connection Error Message on the configuration; Operations → Logs for one line per run with counts and the provider message; Operations → Queues for queued jobs and their retries; the Statistics tab for last-sync times and totals.

Field reference

Create a connection record on the lazada.configuration model. The fields the module defines for the connection are:

FieldTechnical nameTypeRequired
Configuration NamenameCharYes
App Keyapp_keyCharYes
App Secretapp_secretCharYes
RegionregionSelectionYes
Companycompany_idMany2oneYes
Lazada URLlazada_urlCharNo
Access Tokenaccess_tokenCharNo
Refresh Tokenrefresh_tokenCharNo
MarketplacemarketplaceCharNo
Settlement Clearing Accountsettlement_clearing_account_idMany2oneNo
Webhook Shared Secretwebhook_secretCharNo

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.

The same record carries these behaviour checkboxes:

CheckboxTechnical nameWhat it governs
Sync Productssync_productsWhether product and inventory work is allowed — the export wizard and the webhook dispatcher both check it
Sync Orderssync_ordersWhether order topics from the webhook are processed
Sync Customerssync_customersWhether customer synchronization is allowed
Sync Inventorysync_inventoryWhether the inventory push runs
Auto Sync Customersauto_sync_customersWhether the scheduled customer sync picks this configuration up
Auto Import Settlementssettlement_auto_importWhether settlement files are imported automatically
Auto Invoice on Confirmauto_invoice_on_confirmWhether a confirmed Lazada order is invoiced automatically

Leave anything you are not ready for switched off, and turn them on one at a time.

Removed in 19.0.2.1.1

auto_sync_products and auto_sync_orders no longer exist. They gated product and order sync crons that had been withdrawn, so no code read them — a switch that promised automation the module could not deliver. Product and order synchronization is operator-driven: run it from the Operations wizards. The import wizard's own per-type checkboxes and sync-frequency field, and the export wizard's include-images option, were removed for the same reason.

The module's own source contacts these hosts: api.lazada.sg, api.lazada.co.id, api.lazada.co.th, api.lazada.com.my, api.lazada.com.ph, api.lazada.vn, auth.lazada.com, open.lazada.com. Your firewall must allow outbound HTTPS to them.

Scheduled actions

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

Scheduled actionRuns everyEnabled on installWhat it does
lazada: Sync Customers6 hoursYesSyncs customers for every active configuration with Auto Sync Customers on
lazada: Test Connection1 dayYesVerifies each configuration's credentials still work
lazada: Cleanup Old Logs1 dayYesTrims the module's own sync-log records

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.

Product, order and inventory synchronization is operator-driven in this release: run it from Lazada → Operations (Import Wizard, Export Wizard, Import Settlement) or from the actions on the configuration record. The webhook receiver below is the near-real-time path for order and product events.

Webhook and API endpoints your server exposes

These are the HTTP routes this module adds to your Odoo instance. Only the public one is reachable without an Odoo login.

EndpointAuthPurpose
/lazada/webhookpublicInbound Lazada push notifications. Verified: Lazada signs each delivery with HMAC-SHA256 over the raw body using the seller's shared secret, sent as X-Lazop-Signature (X-Signature is also accepted). The module checks it against the webhook_secret of every active Lazada configuration to identify the tenant, then dispatches the payload's message_type/topic to lazada.sync.service
/lazada/api/statuslogged-in userconnection and sync status read by the dashboard
/lazada/dashboard/datalogged-in userdashboard KPI data

Register https://<your-odoo-host>/lazada/webhook as your push-notification URL in the Lazada Open Platform app console, and put the same shared secret into Webhook Secret on the Lazada configuration record. A delivery whose signature does not verify against an active configuration is rejected with HTTP 403 and never processed — a blank Webhook Secret therefore rejects everything.

Status code changed in 19.0.2.1.1

A failed signature check now answers 403 Forbidden, where earlier builds answered 401. 401 was the wrong code: there is no credential challenge for the caller to answer. If you monitor the endpoint, update the expected status.

Order topics are skipped when Sync Orders is off, and product/inventory topics when Sync Products is off; the delivery is still acknowledged and the skip is recorded with its reason. Deliveries are recorded in lazada.webhook.log with their topic, payload and processing result, so a failing integration is diagnosable from Odoo.

Using the module

The module's menu is laid out as:

  • Lazada → Dashboard
  • Lazada → Orders
  • Lazada → Products
  • Lazada → Customers
  • Lazada → Reverse Orders
  • Lazada → Queues
  • Lazada → Finance — Settlement Lines, Fee / GL Mapping
  • Lazada → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports, Import Settlement, Backfill Combo BOMs
  • Lazada → Configuration — Settings, Product Attributes

A normal first run is:

  1. Save the connection record and confirm the module reports a successful connection before importing anything.
  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.

Importing

The Import Wizard brings products, orders and customers into Odoo. From 19.0.2.1.1:

  • Import Customers is a working action that honours the import limit and the create-missing, update-existing and map-only options, and records its progress, status and result on the wizard.
  • Per-record product import works: an Import queue line fetches the item through Lazada's item-get call and creates or updates the mapped product template, detecting combo listings. Before this release every product queue line failed with a not-implemented error.
  • Customer sync reads the buyer list by its real shape. Earlier builds read clone-era keys and stored every buyer with an empty Lazada id, so buyers could not be matched on a later run. Re-run the customer sync after upgrading to repair those records.

Exporting products, prices and stock

The Export Wizard is a real push from 19.0.2.1.1 — previously it reported an honest not-implemented error. It creates and updates listings on Lazada and writes the returned item id back onto the Odoo product template, so the two stay linked.

OptionWhat it does
Export LimitCaps how many products the run pushes
Update ExistingUpdates products already mapped to a Lazada item
Create MissingCreates unmapped products on Lazada
Include VariantsPushes variant data alongside the template

Inventory push sends quantity and price for every mapped template and stamps Last Inventory Sync on the configuration. It runs only when the configuration's Sync Inventory toggle is on.

Reverse orders, attributes and queues

Reverse Orders (Lazada's returns and cancellations) gained a full set of screens in 19.0.2.1.1: a search view with filters and group-bys, a kanban grouped by state, plus pivot and graph views for analysis.

Product Attributes are manageable from Configuration, with list and form views that surface the Is Sale Attribute marker distinguishing variant-forming attributes from descriptive ones. Queues has its own menu entry.

Dashboard

The OWL 2 dashboard shows KPI tiles with period-over-period deltas, a sales-trend line chart, an order-status doughnut, an activity feed, quick actions and a status footer.

From 19.0.2.1.1:

  • Charts drill down. Clicking a day on the sales trend opens that day's Lazada orders; clicking an order-status segment opens the orders in that state.
  • Amounts are formatted in the configuration's currency instead of a hardcoded dollar sign.
  • Dashboard queries carry explicit limits, and opening the dashboard is the only action that creates its record — refreshing the data does not write anything.
  • The dashboard's Sync button runs the customer sync, which is the real manual-sync surface. It previously called a route that had been withdrawn and did nothing.

Troubleshooting

Licensing (Odoo 17 and 18 only)

Symptom / error codeCause and fix
VERSION_MISMATCHThe licence is for a different Odoo major version than the database you activated on. Licences are not transferable across Odoo versions.
MODULE_MISMATCHThe licence belongs to a different ECOSIRE module. Check you selected Lazada Store Management (lazada_store_management) in the activation dropdown.
NOT_ACTIVATED_ON_DOMAINThe database's web.base.url domain is not among the licence's activated domains. Activate on this domain, or deactivate the old one first.
LICENSE_EXPIRED / LICENSE_INACTIVEThe licence is past its expiry or has been suspended. Check the licence in your ECOSIRE portal.
LICENSE_NOT_FOUNDThe key does not exist. Keys are upper-cased before sending, so case is not the problem — re-copy it from your portal.
Activation limit reachedEvery slot on the licence is bound to a domain. Deactivate one first.
Too many failed activation attemptsTen failures in one hour. Wait up to 60 minutes.
Could not determine your Odoo instance domainweb.base.url is empty. Set it, then activate.
Odoo refuses to install the moduleecosire_license_client is not in your addons path. See step 3.
You are asked for a licence key on Odoo 19You are running a 2.0.x build. From 19.0.2.1.0 the Odoo 19 build needs no key — download the current build from your dashboard.

Syncing

SymptomCause and fix
The requests library is requiredrequests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo.
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).
Webhook deliveries are all rejectedWebhook Secret is blank on every active configuration, or does not match the secret registered in the Lazada console. A failed check answers HTTP 403 and is recorded in lazada.webhook.log.
A webhook delivery is acknowledged but nothing happensSync Orders or Sync Products is off for that configuration; the skip and its reason are recorded on the log line.
Product or order sync never runs on its ownThat is expected in this release — only customers are on a schedule. Run products and orders from Operations.
Every imported buyer has a blank Lazada idAn Odoo 19 build older than 19.0.2.1.1 read the wrong payload keys. Upgrade, then re-run the customer sync.
Export reports not implementedAn Odoo 19 build older than 19.0.2.1.1. Upgrade — export and inventory push are real from that release.
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.
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.

Version history

Odoo versionVersion you download today
17.017.0.2.0.3
18.018.0.2.0.2
19.019.0.2.1.1

ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.1.1 is the Odoo 19 build of module version 2.1.1. Your installed version is shown in Apps — and, on Odoo 17 and 18, in Settings → ECOSIRE.COM → License Status.

Support