Skip to main content

Lazada Store Management

Connect your Lazada seller account to Odoo through the Lazada Open Platform API. This module uses HMAC-SHA256 signed requests with region-specific endpoints to synchronize products, orders, and inventory across all six Lazada markets in Southeast Asia (Singapore, Malaysia, Thailand, Indonesia, Vietnam, Philippines).

Compatibility: Odoo 17 / 18 / 19 Published version (what you download today): 19.0 → 19.0.2.1.2, 18.0 → 18.0.2.0.2, 17.0 → 17.0.2.0.3. The 2.2.x notes below describe the next release, built and tested but not yet published; the request-signing, authorization and token-renewal fixes arrive with it. Price: $499 (one-time), per Odoo major version Licence: OPL-1 on Odoo 17, 18 and 19 — no activation key and no licence client to install on any series

Key Features​

  • Lazada Open Platform API with HMAC-SHA256 signing
  • Multi-region support: Singapore, Malaysia, Thailand, Indonesia, Vietnam, Philippines
  • Country-specific API endpoints
  • Product import from Lazada, and product export from Odoo with item-id write-back
  • Inventory and price push for mapped templates
  • Order import, with buyers and products resolved or created from the order
  • Combo listings mapped onto Odoo bills of materials, with a backfill action
  • Reverse orders (returns and cancellations) with list, kanban, pivot and graph views
  • Settlement import with fee-to-GL account mapping
  • Optional automatic invoicing on order confirmation
  • Category, attribute, shipping-method and payment-method mapping
  • Signature-verified webhook receiver, fail-closed, with a per-delivery log
  • OWL 2 dashboard with KPIs, charts and click-through drill-downs
  • Multi-company record isolation, per-configuration access, and a store selector on the dashboard when you run more than one Lazada account

What's new in 17.0.2.2.3 / 18.0.2.2.3 / 19.0.2.2.3​

The dashboard now shows what is really happening while it loads, fails or has no data.

  • Order Status draws its chart. The doughnut chart could stay blank under its legend even with orders on screen. Both dashboard charts are now drawn from the loaded figures once the page shows them.
  • A chart with nothing to show says so ("No sales in this period", "No orders in this period") instead of an empty frame.
  • The first load shows a loading skeleton and a message, not a row of zero figures that looked like a finished, empty dashboard. A first load that fails shows the error and a Retry button, with the quick actions still available, instead of an error above a page of zeros.
  • The store name fits on a phone. A long store name stays on one line and is truncated (the full name shows on hover), and its icon now displays correctly.
  • The Sales Trend axis states its scale. Amounts in thousands keep one decimal ("1.2K"), so 1,200 no longer reads "1K" next to the real 1,000 tick.
  • Top Products bars compare revenue. The amount sits in a fixed, right-aligned column, so every bar has the same track length.
  • Imported Customers fits a phone: shorter column labels, the sync status as a coloured badge, and the e-mail column available through the optional-columns toggle.

What shipped in 17.0.2.2.2 / 18.0.2.2.2 / 19.0.2.2.2​

  • Every dashboard label is readable, in light and dark mode. Status labels painted a colour on its own pale tint (green measured 2.04:1 against a 4.5:1 floor) and the dark-mode accent buttons drew white on pale blue (2.29:1). Each tinted label now uses an ink colour chosen for that exact background and filled buttons have their own text token (7.84:1 dark, 6.38:1 light). Fill colours are unchanged, so the dashboard looks the same and reads correctly.
  • The dashboard's populated, empty, loading and error states are each covered by a browser test, so a later release cannot regress them unnoticed.

What shipped in 17.0.2.2.1 / 18.0.2.2.1 / 19.0.2.2.1​

  • The connector really talks to Lazada. Requests are signed exactly as Lazada's Signature algorithm page specifies (app_key, timestamp, sign_method=sha256, access_token and sign as request parameters, HMAC-SHA256 over the API path and the sorted parameters), and the signature reproduces Lazada's own worked example byte for byte. Lazada's result code — not the HTTP status — decides success, so a rejected call is an error with Lazada's own message, never a silent success.
  • Authorize with Lazada, tokens renewed for you. One button on the configuration opens Lazada's consent page; the connector exchanges the returned code itself and renews the access token daily before it lapses. Both expiry dates are shown on the form.
  • Fulfilment, returns and pushes on Lazada's current operations. Pack and ready-to-ship use the New Fulfillment API, returns use the Return and Refund API, and push notifications are verified with the app's own credentials.
  • "Push Inventory" pushes. The button sends price and sellable quantity for every product mapped to the store and reports how many Lazada accepted and how many it rejected.
  • One store, one answer. The dashboard names the store its figures belong to and offers a store selector when you run more than one; it never reads across companies.
  • Fleet-wide version parity. The 17.0 and 18.0 builds now carry the same connector, brought level with Odoo 19's.

Prerequisites​

  • Odoo 17, 18, or 19 (Community or Enterprise edition)
  • Your ECOSIRE purchase for this module and your Odoo version. No key is entered in Odoo on any series — the module installs and runs from the ZIP
  • A Lazada seller account in one of the supported markets
  • A Lazada Open Platform account with the Software Developer role and a Seller In-house APP (its App Key and App Secret), with the store whitelisted on the app and authorized to it

Installation​

  1. Download the module ZIP from your ECOSIRE Dashboard
  2. Extract to your Odoo addons directory:
    unzip ecosire-lazada-*.zip -d /opt/odoo/addons/
  3. Restart the Odoo service:
    sudo systemctl restart odoo
  4. Navigate to Apps, click Update Apps List
  5. Search for Lazada Store Management and click Install
  6. That is the whole installation on every series — there is no licence client to install and no activation step. The full screen-by-screen procedure is in the installation guide

Configuration​

Step 1: Obtain Lazada API credentials​

The full, screen-by-screen procedure is in Connect to Lazada — step by step on the installation page, rewritten from the shipped build and Lazada's current Open Platform guides on 17 September 2026. In outline:

  1. Sign up at Lazada Open Platform and register the Software Developer role.
  2. App Management → Create App: apply for the Seller In-house APP category (usually approved the same working day), then create the app with your Odoo address as its Callback URL.
  3. Note the App Key and App Secret on the app's details page.
  4. Add the store to the app's Authorized Seller Whitelist (Seller ID = the short code from Seller Center → Settings), then open https://auth.lazada.com/oauth/authorize?response_type=code&force_auth=true&redirect_uri=<Callback URL>&client_id=<App Key>, sign in with the store's Seller Center account and click Authorize. Lazada redirects to your callback with code= in the address bar.
  5. Within 30 minutes exchange the code at https://auth.lazada.com/rest/auth/token/create for the Access Token and Refresh Token — or send us the code and we run the exchange for you.

Step 2: Connect in Odoo​

  1. Navigate to Lazada → Configuration → Settings and click New
  2. Enter the App Key and App Secret, and — as an Odoo administrator — the Access Token and Refresh Token; select the Region (Singapore, Malaysia, Thailand, Indonesia, Vietnam or Philippines) and assign the Odoo Company
  3. Save and click Test Connection
Test Connection now proves the credentials

Requests are signed exactly as Lazada's Signature algorithm page specifies, and Lazada's own result code — not the HTTP status — decides success. Test Connection calls Lazada's Get Seller and reports Connected only when Lazada returns the seller the token is bound to; a missing token, a wrong App Secret or an expired token each report their own reason. Builds before 19.0.2.2.0 — including the currently published 19.0.2.1.2 — answer every call with MissingParameter; the fix ships with the next release, and we will tell you when it is available to download — and if anything still looks wrong, write to info@ecosire.com: integration support is included with your purchase.

Step 3: Configure Sync Settings​

On the configuration record, switch on only the areas you are ready for — Sync Products, Sync Orders, Sync Customers, Sync Inventory — and turn them on one at a time. They gate the export wizard, the inventory push and which webhook topics are processed.

Auto Sync Customers is the one toggle that puts a lane on a timer: the lazada: Sync Customers scheduled action (every 6 hours) picks up active configurations that have it on. Product and order synchronization is operator-driven — run it from the Operations wizards, with the webhook receiver as the near-real-time path.

Two further options are worth setting deliberately:

  • Auto Import Settlements — imports settlement files as they arrive
  • Auto Invoice on Confirm — invoices a confirmed Lazada order automatically

Then set up the mappings under Lazada → Configuration, so imported data lands on the right Odoo records: categories, product attributes and terms, shipping methods to Odoo carriers, payment methods to journals, order statuses, and — under Finance — Lazada fees to the GL accounts they should post to.

Initial Sync​

  1. Go to Lazada > Operations > Import Wizard
  2. Select the data types to import (Products, Customers, Orders)
  3. Set the date range for historical orders
  4. Start the import and monitor progress in the sync log

Run a small import first — restrict it by date or to a handful of products — and check the results before importing everything. To push the other way, use Operations → Export Wizard, which creates and updates Lazada listings and writes the returned item id back onto the Odoo product.

API Details​

FieldValue
Auth methodHMAC-SHA256 signed requests + OAuth tokens
Auth URLhttps://auth.lazada.com/oauth/authorize
Token URLhttps://auth.lazada.com/rest/auth/token/create
SG endpointhttps://api.lazada.sg/rest
MY endpointhttps://api.lazada.com.my/rest
TH endpointhttps://api.lazada.co.th/rest
ID endpointhttps://api.lazada.co.id/rest
VN endpointhttps://api.lazada.vn/rest
PH endpointhttps://api.lazada.com.ph/rest
SignatureHMAC-SHA256 over sorted params with api_path prefix
Key config fieldsapp_key, app_secret, access_token, refresh_token, region

Dashboard​

The built-in OWL 2 dashboard provides real-time visibility into your integration:

  • 6 KPI cards -- Revenue, Orders, Customers, Products, Avg Order Value, and Sync Health -- each with period-over-period delta indicators
  • Sales Trend chart (Chart.js line chart) with interactive date filtering
  • Order Status breakdown (doughnut chart) showing distribution across statuses
  • Period filters -- Today, 7 days, 30 days, 90 days, Year, or Custom date range
  • Activity feed showing recent sync log entries with type indicators
  • Quick action buttons for Products, Orders, Customers, Queue, Logs, and Settings
  • Status footer with Queue Jobs, Errors, Out of Stock, and Sync Rate
  • Auto-refresh every 60 seconds with dark mode support
  • Chart drill-downs (Odoo 19, from 19.0.2.1.1) — click a day on the sales trend to open that day's Lazada orders, or an order-status segment to open the orders in that state
  • Amounts formatted in the configuration's currency

Troubleshooting​

IssueSolution
Connection failedVerify API credentials; check network connectivity
Product or order sync never runs on its ownExpected — only the customer sync is scheduled. Run products and orders from Operations, or rely on the webhook.
Duplicate productsReview product mapping; ensure SKU matching is configured
Orders not importingVerify order status filters and date range settings
Wrong region endpointVerify the Region field matches your Lazada seller account market
Signature errorCheck app_secret and ensure timestamp is in milliseconds
Webhook deliveries rejected with 403The delivery's Authorization header does not match HMAC-SHA256 of app_key + body under the app's App Secret. Check that the App Secret on the configuration is the one the app uses, and that nothing between Lazada and Odoo rewrites the request body
Token expiredModule auto-refreshes; re-authorize if refresh token has expired

Support​