Skip to main content

SHEIN Store Management

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

Technical nameshein_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.0 → 17.0.2.1.0, 18.0 → 18.0.2.1.0, 19.0 → 19.0.2.1.0
Price$499 USD — one-time, per Odoo version
Odoo module licenceOPL-1 (Odoo Proprietary License v1.0)
CategoryConnector
No activation key, no licence client

The module installs and runs standalone on all three Odoo versions. There is no ecosire_license_client dependency, no activation step and no key to paste — install the ZIP, connect your SHEIN account and it works. Licensing is contractual (OPL-1). Each Odoo major version is a separate download: buy the build for the version you run.

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
Python packagesrequests
Platform accountA SHEIN account with API access

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. Download the ZIP that matches your Odoo major version.

2. Extract into your addons path​

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

The module must end up as a single top-level shein_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 SHEIN Store Management and click Install.
  3. Odoo pulls in the Odoo apps listed above automatically. There is no activation step afterwards.

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

Configuration​

Connect to SHEIN​

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

FieldTechnical nameTypeRequired
Configuration NamenameCharYes
App IDapp_idCharYes
App Secretapp_secretCharYes
Caller IDcaller_idCharYes
Companycompany_idMany2oneYes
Access Tokenaccess_tokenCharNo
Shein URLshein_urlCharNo
MarketplacemarketplaceCharNo
Primary Regionshein_regionSelectionNo
Webhook Secretwebhook_secretCharNo
Webhook URLwebhook_urlCharNo

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 11 behaviour checkboxes — sync_products, sync_orders, sync_customers, sync_inventory, auto_sync_products, auto_sync_orders, auto_sync_customers, enable_us_market, enable_eu_market, enable_mena_market, enable_latam_market. 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: openapi-portal.sheincorp.com, open.sheincorp.com, openplatform.sheincorp.com, openapi-portal-eu.sheincorp.com, openapi-portal-latam.sheincorp.com, openapi-portal-mena.sheincorp.com. Your firewall must allow outbound HTTPS to them.

Public endpoints: the webhook receivers​

The module registers two publicly reachable HTTP routes. They are the only endpoints served without an Odoo login, and they do not do the same thing — use the second one.

EndpointMethodAuthUse it?
/shein/webhook/<config_id>POSTpublic (no Odoo session)Yes — the HMAC-validated receiver
/shein/webhookPOSTpublic (no Odoo session)No — legacy receiver, rejects everything

The receiver to register​

Register the /shein/webhook/<config_id> form in the SHEIN Seller Hub portal. The trailing segment is the database id of the shein.configuration record, so each connection has its own URL. You do not have to build it by hand — the configuration record carries a read-only Webhook URL field (webhook_url) that composes it for you from web.base.url, e.g. https://erp.example.com/shein/webhook/3. Copy it from there; that guarantees it matches the record you are configuring.

Set the Webhook Secret (webhook_secret) on the same configuration record before you register the URL:

An empty Webhook Secret disables signature checking

Signature validation only runs when webhook_secret is set. If you leave it blank, the endpoint accepts and queues unsigned payloads from anyone who can reach your instance. Always set a secret, and use the same value in the SHEIN portal.

With a secret configured, the receiver validates the inbound HMAC-SHA256 signature taken from the X-Shein-Signature header (it also accepts X-Signature) against the raw request body. What it answers:

ResponseMeaning
200 okSignature accepted; the event is queued
401 invalid signatureThe HMAC did not match your configured secret
404 unknown configurationNo shein.configuration with that id — check the URL's trailing number
400 invalid jsonThe body was not parseable JSON

An accepted delivery is not processed inside the request. It is written to the shein.inbound.event queue and acknowledged immediately (the ACK budget is 10 seconds, so SHEIN never times out waiting for Odoo to do the work). The scheduled action SHEIN: Dispatch Inbound Webhooks then drains that queue every minute and runs the handlers. If events pile up in the queue, check that this scheduled action is still active before suspecting the portal.

The legacy route, which fails closed​

The unnumbered /shein/webhook route is the older receiver and it rejects every delivery on purpose. No inbound delivery-signature scheme is pinned for SHEIN on that path in ECOSIRE's platform contract, so rather than trust an unsigned payload it fails closed: HTTP 403 with {"status": "rejected", "message": "signature verification failed"}, and nothing is processed. Do not register this URL in the Seller Hub.

The module's remaining routes — /shein/api/status, /shein/api/sync and /shein/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 8 scheduled actions (Settings → Technical → Scheduled Actions):

Scheduled actionRuns everyEnabled on install
shein: Sync Products1 hourYes
shein: Sync Orders30 minutesYes
shein: Sync Customers6 hoursYes
shein: Sync Inventory15 minutesYes
shein: Test Connection1 dayYes
shein: Cleanup Old Logs1 dayYes
SHEIN: Daily Digest1 dayYes
SHEIN: Dispatch Inbound Webhooks1 minuteYes

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:

  • SHEIN → Dashboard
  • SHEIN → SHEIN Orders
  • SHEIN → Orders
  • SHEIN → Products
  • SHEIN → SHEIN Products
  • SHEIN → Customers
  • SHEIN → SHEIN Buyers
  • SHEIN → After-Sales — Returns, Refunds, Risk Flags
  • SHEIN → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports
  • SHEIN → Finance — Settlements, Daily Analytics, Daily Digest
  • SHEIN → Configuration — Settings, Onboarding Wizard, Master Data, Automation

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.

Troubleshooting​

Installing​

Symptom / errorCause and fix
The requests library is requiredrequests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo.
Odoo asks for ecosire_license_client or an activation keyYou are installing an older build (before 2.1.0). Download the current ZIP from your dashboard and upgrade the module; the current builds have no licence dependency.

Syncing​

SymptomCause and fix
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).
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.
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.1.0
18.018.0.2.1.0
19.019.0.2.1.0

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

Support​