Skip to main content

Shopee Store Management

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

Technical nameshopee_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.017.0.2.0.2, 18.018.0.2.0.2, 19.019.0.2.1.3
Price$549 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.

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 — 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 Shopee account with API access
LicenceYour purchase for this module and your Odoo version. On Odoo 19 no key is entered in Odoo

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 shopee_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/shopee_store_management/__manifest__.py # sanity check

The module must end up as a single top-level shopee_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, shopee_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 Shopee 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 Shopee 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.

How to obtain a licence key

The steps below activate a key you already hold. This is how you get one in the first place.

  1. Create an ECOSIRE account at ecosire.com, using the email address you want the licence issued to. Your keys and your downloads both live in that account's dashboard.
  2. Buy the module — either directly on ecosire.com, or from the Odoo App Store.
  3. Bought on ecosire.com? The key is issued to your dashboard automatically once the order completes. Nothing else to do.
  4. Bought on the Odoo App Store? Send us proof of purchase: email info@ecosire.com from the same address as your ecosire.com account, with the Odoo sales-order slip or order reference (the purchase receipt Odoo emails you at checkout). The App Store does not tell ECOSIRE who bought what, so this is how we match your purchase to your account.
  5. We issue the key to your dashboard, next to the ZIP for your Odoo version, in the form ECO-XXXX-XXXX-XXXX.
One licence, one Odoo major version

The key is issued against the Odoo major version you bought — see the warning at the top of this page. Tell us which version you run when you send proof of purchase, so we issue the right one.

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 Shopee 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": "shopee_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 Shopee — 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.3) and from Shopee Open Platform's own Developer account registration, App management and Authorization and Authentication guides as they read on that date (last updated by Shopee on 10 September, 24 April and 23 July 2026 respectively). It has two halves: what you do on Shopee Open Platform, then what you do in Odoo.

Token renewal is handled by support in this build

Shopee issues an access token that lasts 4 hours and a refresh token that lasts 30 days, and expects the connected system to renew the access token before it expires. The 19.0.2.1.3 build stores the pair you obtain in Half A but does not yet renew it on its own, and it has no button to run the shop authorization from Odoo. Automatic renewal and an Authorize with Shopee button are in the next update. Until it reaches you, do Half A once to connect the shop, then write to info@ecosire.com: integration support is included with your purchase and we keep the shop's token current for you at no charge.

Half A — Shopee Open Platform

Shopee's developer console is Shopee Open Platform: https://open.shopee.com (Brazil: open.shopee.com.br; mainland China: open.shopee.cn). The Console link at the top of that site opens the App List.

A1. Register a developer account. On the Open Platform homepage select Log In → Sign up, enter an email (it cannot be changed later), confirm the verification code and set a password. Then open Console → App Management → App List and choose your account type:

You areChooseNote
A company selling on Shopee, connecting your own shopShopee Seller → Registered Business SellerYou are redirected to log in with your Seller Centre account to verify it, then fill the seller identification form (Key Account Manager email may be left blank)
An individual selling on ShopeeShopee Seller → Individual SellerSame flow; identification documents required
A software vendor serving other sellersThird-party Partner Platform (ISV)Business documents and a live product URL required

Shopee processes seller applications in 3 working days (7 in Indonesia) and ISV applications in 10. Approval arrives by email. Shopee also applies per-market eligibility rules to seller accounts — for example Thailand currently requires a Mall or Managed seller, Malaysia a Mall, registered business or recently active seller — so check the Eligibility Criteria table on Shopee's registration page for your market before applying.

A2. Create the app. Once approved, open Console → Create App. Under Basic Information set the App Type to Seller In-house System (the type a seller uses for its own shop; it has every v2 API including chat), the App Name, a description and a logo. Creating the app gives you a Test Partner ID and Test Key — those work only in Shopee's sandbox, not against your live shop.

A3. Go live. Select the app in the App List and click Go Live, fill in the Go Live form (it includes a declaration of the IT assets and IP addresses your Odoo server calls Shopee from), and submit. Shopee reviews it in about 24 hours. Once the app is Online, the App Key section of the app shows the Live Partner_id and Live Key — the pair the Odoo form needs.

A4. Set the Redirect URL Domain. Edit the app and fill the Live Redirect URL Domain (and, if you will use the sandbox, the Test Redirect URL Domain) with the domain of your Odoo instance — for example erp.example.com. Shopee validates the redirect address in every authorization link against this domain. If the field is empty Shopee does not validate it, but fill it: an unvalidated redirect is a security gap.

A5. Authorize the shop. Shopee's current authorization link is an unsigned URL. In the App List, a Seller In-house System app shows an Authorize button — click it, enter the redirect URL and Shopee generates the link for you. The link has this shape:

https://open.shopee.com/auth?partner_id=<Live Partner_id>&auth_type=seller&redirect_uri=https://<your-odoo-host>/&response_type=code

Open it in a browser and sign in with the shop account (not a sub-account — sub-accounts cannot log in to the authorization page), enter the verification code Shopee sends to the shop's phone, click Confirm Authorization and choose the authorization period (7, 30, 90, 180 or 365 days, or a custom date within 365 days). Shopee then redirects the browser to your redirect address with two values in the query string:

https://<your-odoo-host>/?code=xxxxxxxxxx&shop_id=xxxxxx

Copy both. The code can be used once and expires after 10 minutes; the shop_id is your shop's identifier and goes into the Odoo form. (A main account authorizing several shops returns main_account_id instead; the connector is configured per shop, so authorize with the shop account.)

A6. Exchange the code for tokens. Within the 10 minutes, call Shopee's GetAccessToken endpoint with the code. The call is a signed POST to https://partner.shopeemobile.com/api/v2/auth/token/get with the code, shop_id and partner_id in the body and a signature over partner_id + api_path + timestamp computed with the Live Key — Shopee's Authorization and Authentication guide shows the exact request in Python, Java and PHP. The response carries the access_token (valid 4 hours), the refresh_token (valid 30 days) and expire_in. If you would rather not run this yourself, send us the code and shop id the moment you have them and we run the exchange for you.

A7. The seller can revoke at any time in Seller Centre → Platform Partner, where every authorized app is listed with its expiry; when the authorization period ends the shop must authorize again (repeat A5–A6).

Half B — Odoo (19.0.2.1.3)

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

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

B2. Fill the Connection group.

FieldValue
Configuration NameAny name, e.g. the shop's trading name
Partner IDThe Live Partner_id from Open Platform (A3)
Partner KeyThe Live Key from Open Platform (A3)
Shop IDThe shop_id Shopee returned in the redirect (A5)
Access TokenFrom the token exchange (A6) — the field is shown to Odoo administrators only
Refresh TokenFrom the token exchange (A6) — administrators only
RegionThe market the shop sells in: Singapore, Malaysia, Thailand, Taiwan, Indonesia, Vietnam, Philippines, Brazil, Mexico, Colombia, Chile or Poland
Multi-RegionLeave off for a single-market shop
Timeout (seconds)Leave at 30
Company (in the Status group)The Odoo company that owns this shop's orders and stock

Shopee URL can stay empty — the build calls partner.shopeemobile.com for every region.

B3. Save, then click Test Connection in the form header. The connector calls Shopee's Get Shop Info with the stored token. On success Connection Status turns to Connected and Last Connection Test is stamped; on failure it turns to Error and Connection Error Message shows Shopee's reply. error_auth, error_token or invalid_access_token means the access token is missing, wrong, or older than 4 hours — obtain a current one (see the note at the top of this section). Operations → Test Connection runs the same check as a wizard, without saving anything.

B4. Choose what synchronizes — the Synchronization tab. Data Types (Sync Products, Sync Orders, Sync Customers, Sync Inventory) decide which areas the connector may touch; Automation (Auto Sync Products, Auto Sync Orders, Auto Sync Customers, and Sync Frequency) decides which scheduled actions pick this shop up. The automation switches are off by default.

B5. First synchronization. Click Sync Products and Sync Orders in the header, or use Operations → Import Wizard for a guided run with a preview. Imported products appear under Products (and Shopee Products for the Shopee-side records), orders under Orders.

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 → Daily Digests for the daily summary; the Statistics tab for last-sync times and totals.

Single-region and multi-region shops (Odoo 19)

The Multi-Region toggle is on the configuration form from 19.0.2.1.1 and is enforced, not decorative. A configuration with Multi-Region off refuses auto-workflow and warehouse rows that belong to any other region, so a single-market shop cannot silently accumulate routing rules for markets it does not sell in. Switch it on before adding rows for a second market.

Public endpoint: the webhook receiver

The module registers one publicly reachable HTTP route. It is the only endpoint on this module served without an Odoo login, so it is worth knowing exactly what it does before you expose your instance.

EndpointMethodAuthPurpose
/shopee/webhookPOSTpublic (no Odoo session)Receives inbound Shopee event deliveries

Register this URL as your Push URL in the Shopee Open Platform console, in the form https://erp.example.com/shopee/webhook — substituting the real host you set in web.base.url.

Shopee Open Platform v2 signs each push with your Partner Key: the Authorization header carries HMAC-SHA256(partner_key, "<push url>|<raw body>") as a hex digest. The receiver recomputes exactly that and compares it in constant time. The key it uses is the Partner Key (partner_key) from the linked shopee.configuration, falling back to the Secret Key on the webhook record itself.

The webhook record's Delivery URL must match your Push URL exactly

Shopee mixes the push URL into the signed string, so a mismatch of even one character makes every delivery fail verification. When you create a shopee.webhook record and leave Delivery URL empty, Odoo fills in a default of <web.base.url>/shopee/webhook/<topic> — note the extra topic segment, which is not the URL the route is served at. Set Delivery URL by hand to the exact Push URL you registered in the Shopee console.

A delivery is acknowledged ({"status": "success"}) only after an active webhook record verifies it. Anything unverified — no partner key configured, missing Authorization header, or a digest mismatch — is rejected with HTTP 403 and nothing is processed. The rejection is logged with the caller's IP.

Pausing a receiver (Odoo 19). The webhook record's Activate/Pause control is a real local switch from 19.0.2.1.1: a paused record stops accepting deliveries on the Odoo endpoint, so you can stop ingesting without touching the Shopee console. It is deliberately local-only — Shopee-side push subscriptions are configured in Seller Center and cannot be toggled remotely through the API.

The module's remaining routes — /shopee/api/status, /shopee/api/sync and /shopee/dashboard/data — are internal JSON-RPC endpoints used by the module's own screens. They require a logged-in Odoo user and are not part of your external setup.

Scheduled actions

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

Scheduled actionRuns everyEnabled on install
shopee: Sync Products1 hourYes
shopee: Sync Orders30 minutesYes
shopee: Sync Customers6 hoursYes
shopee: Sync Inventory15 minutesYes
shopee: Test Connection1 dayYes
shopee: Cleanup Old Logs1 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.

The import wizard's Sync Frequency field takes effect from 19.0.2.1.1: choosing anything other than Manual persists that cadence and switches on the matching auto-sync flags on the configuration when the import runs. Leave it on Manual to change nothing.

Using the module

The module's menu is laid out as:

  • Shopee → Dashboard
  • Shopee → Shopee Orders
  • Shopee → Orders
  • Shopee → Products
  • Shopee → Shopee Products
  • Shopee → Customers
  • Shopee → Shopee Customers
  • Shopee → Finance — Settlements, Refunds, Returns, Risk Flags
  • Shopee → Analytics
  • Shopee → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports, Daily Digests
  • Shopee → Configuration — Settings, Master Data

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.

Shopee Orders has a kanban view grouped by status from 19.0.2.1.1, alongside the list and form views.

Importing products

Product synchronization pulls your Shopee catalogue through Shopee's item list and hydrates each item with its base info, so a sync returns fully populated products rather than bare ids. Queue lines of type product import that single Shopee item by id — before 19.0.2.1.1 a per-record product line reported a not-implemented error and did nothing.

Exporting products, prices, images and stock

The Export Wizard pushes Odoo data to Shopee, and every option on it takes effect from 19.0.2.1.1:

OptionWhat it does
Export LimitCaps how many products the run pushes
Update ExistingUpdates products already mapped to a Shopee item (update_item / update_price)
Create MissingCreates unmapped products on Shopee (add_item)
Include ImagesUploads product images to Shopee MediaSpace
Include VariantsPushes per-variant prices, matched to Shopee models by SKU

On-hand stock is pushed with the same run (update_stock).

Barcodes are checked before export

Run Barcode Preflight first. The action is available on Odoo products and on the Shopee shadow items, and validates that a barcode is a structurally valid GTIN-8, GTIN-12, GTIN-13 or GTIN-14. The export wizard refuses to push a product whose barcode has not passed preflight — that is deliberate, because Shopee rejects a malformed barcode at listing time and the failure is much harder to read from the far side.

Invoicing imported orders

The auto-workflow's Validate Payment toggle takes effect from 19.0.2.1.1: with it on, the posted invoice of an imported order is marked paid through a registered payment, so a Shopee order that arrives already paid does not sit in your receivables.

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 of recent sync log entries, quick actions and a status footer.

From 19.0.2.1.1:

  • The sales-trend chart counts Shopee orders only. It previously aggregated every sale order in the database into the daily series, so the chart overstated Shopee performance on any database that also sells elsewhere.
  • KPIs and chart tooltips are formatted in the record's own currency as reported by the server, instead of a hardcoded dollar sign.
  • Dashboard queries are bounded, and opening the dashboard is the only action that creates its record — refreshing the data does not write anything.

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 Shopee Store Management (shopee_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).
'ShopeeAPI' object has no attribute 'get_products'An Odoo 19 build older than 19.0.2.1.1. Upgrade the module; product sync is implemented from that release.
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.
The export wizard skips a productIts barcode has not passed Barcode Preflight, or it is not a valid GTIN. Fix the barcode and re-run preflight.
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.
The dashboard sales chart looks too highAn Odoo 19 build older than 19.0.2.1.1 counted every sale order in the database, not just Shopee's. Upgrade.

What changed in 19.0.2.1.2 and 19.0.2.1.3

Shopee Orders and Imported Orders open correctly (2.1.2). On earlier 19.0 builds these menus could fail to open with an Unknown field "order_sn" error in the browser. Two sets of views had been registered under the same internal identifiers, so the Orders action loaded the wrong search layout. The views now use distinct identifiers and both menus open normally. If you saw that error, upgrade the module — no data was affected and nothing needs re-importing.

Product synchronisation works again (2.1.1). Product sync previously stopped with 'ShopeeAPI' object has no attribute 'get_products'. The connector now calls Shopee's item-list and item-detail endpoints directly, so a product sync returns fully populated products.

Export failures name the product (2.1.2). When an export run rejects a product, the warning now includes the SKU and the Shopee item id, so you can find the record without reading the raw log.

Queue actions are restricted to Shopee Managers (2.1.3). Processing, retrying or cancelling a sync queue (or an individual queue line) now requires the Shopee Manager group and returns a clear access message to everyone else, instead of failing part-way through the operation.

Version history

Odoo versionVersion you download today
17.017.0.2.0.2
18.018.0.2.0.2
19.019.0.2.1.3

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

Support