Skip to main content

Tokopedia Store Management

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

Technical nametokopedia_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.0 → 17.0.2.4.0, 18.0 → 18.0.2.4.0, 19.0 → 19.0.2.4.0
Price$499 USD — one-time, per Odoo version
Odoo module licenceOPL-1
CategoryConnector
One purchase, one Odoo major version

Each Odoo major version is a separate product with its own version number. Buy the version you actually run; if you later upgrade Odoo, you buy the module 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, knowledge — Odoo installs any that are missing
Python packagesrequests
Platform accountA Tokopedia seller account with FS (Fulfillment Service) API access

Install the Python package into the same interpreter that runs Odoo:

sudo -u odoo pip install requests

There is no separate module to download and no activation step. The module installs and runs on its own.

Installation​

1. Download the ZIP for your Odoo version​

Sign in at ecosire.com and open your dashboard downloads.

2. Extract into your addons path​

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

The module must end up as a single top-level tokopedia_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 Tokopedia Store Management and click Install.

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

Configuration​

Connect to Tokopedia​

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

FieldTechnical nameTypeRequired
Configuration NamenameCharYes
Client IDclient_idCharYes
Client Secretclient_secretCharYes
Fulfillment Service IDfs_idCharYes
Shop IDshop_idCharYes
Companycompany_idMany2oneYes
OAuth2 Refresh Tokenrefresh_tokenCharNo
Tokopedia URLtokopedia_urlCharNo
MarketplacemarketplaceCharNo

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 four behaviour switches — sync_products, sync_orders, sync_customers, sync_inventory — plus a sync_frequency selection. The switches gate what the module is allowed to do automatically once it is connected; sync_frequency sets the interval the scheduled actions run at. Leave anything you are not ready for switched off, and turn them on one at a time.

Before you save, use Tokopedia → Operations → Test Connection. It tests exactly the credentials on the form (including the API base URL and refresh token) without creating a store record, and reports what the platform said. Save from the wizard and it persists every field it tested, scoped to your own company.

The module's own source contacts these hosts: accounts.tokopedia.com, fs.tokopedia.net. Your firewall must allow outbound HTTPS to them.

TokoCabang warehouses​

Tokopedia → TokoCabang Warehouses holds the TokoCabang hubs you ship from. A warehouse marked Cross-Province Eligible can be assigned as a product's default warehouse, which is what qualifies an order for the Tokopedia cross-province shipping subsidy. The list filters and groups by province, status, eligibility and store.

Assign a warehouse per product on the Tokopedia tab of the product form; the sales order carries the origin warehouse it was fulfilled from.

The Tokopedia tab on products and orders​

Products and sales orders each carry a Tokopedia tab on their standard form, holding the marketplace identity, the sync state and the last sync error — so the connector's state is visible where you already work, rather than only on the connector's own screens.

Other 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
/tokopedia/webhookPOSTpublic (no Odoo session)Receives inbound Tokopedia event deliveries

This receiver currently rejects every delivery, on purpose. ECOSIRE's platform contract for Tokopedia does not pin an inbound delivery-signature scheme, which means a payload arriving at /tokopedia/webhook cannot be proven to have come from Tokopedia rather than from anyone else who can reach your instance. Rather than trust an unsigned payload, signature verification fails closed: the endpoint answers HTTP 403 with {"status": "rejected", "message": "signature verification failed"} and processes nothing from the request.

What that means for you in practice:

  • You do not need to register this URL with Tokopedia. Pointing Tokopedia at it will produce nothing but 403s.
  • Your data still syncs. Product, order, customer and inventory syncing on this connector is driven by the scheduled actions below, which poll the Tokopedia API on your behalf. Real-time push is not how this connector stays current.
  • The route is safe to leave exposed. It reads the request body and headers, finds no verifying webhook record, logs the rejection with the caller's IP, and returns. Nothing is written and no record is created.
  • The tokopedia.webhook records under Tokopedia → Webhooks (name, topic, delivery URL, secret, delivery and failure counters) exist so the receive path is ready the day a signed Tokopedia delivery scheme is available. They do not enable inbound push today.

The module's remaining routes — /tokopedia/api/status, /tokopedia/api/sync and /tokopedia/dashboard/data — are internal JSON-RPC endpoints used by the module's own screens. They require a logged-in Odoo user, they are scoped to the companies that user may work in, and starting a synchronisation requires the Tokopedia Manager role.

Scheduled actions​

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

Scheduled actionRuns everyEnabled on install
tokopedia: Sync Products1 hourYes
tokopedia: Sync Orders30 minutesYes
tokopedia: Sync Customers6 hoursYes
tokopedia: Sync Inventory15 minutesYes
tokopedia: Test Connection1 dayYes
tokopedia: Cleanup Old Logs1 dayYes

Intervals above are the shipped defaults and are driven by the connection record's sync_frequency. 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:

  • Tokopedia → Dashboard
  • Tokopedia → Products
  • Tokopedia → TokoCabang Warehouses
  • Tokopedia → Orders
  • Tokopedia → GoPay Transactions
  • Tokopedia → PayLater Plans
  • Tokopedia → Dilayani Shipments
  • Tokopedia → Affiliate Commissions
  • Tokopedia → Customers
  • Tokopedia → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Queues, Process History, Logs, Reports
  • Tokopedia → Webhooks
  • Tokopedia → Configuration — Settings

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 and reported to you, rather than only raised at the user.

The dashboard shows your sales, order and customer counts, the sync success rate and a sales trend for the selected period, in your store's own company currency.

Troubleshooting​

SymptomCause and fix
The connection will not validateRe-check every required field in the table above. Most failures are a mistyped secret, an fs_id from a different shop, or credentials created for a sandbox while the module points at production (or vice-versa).
Test Connection fails but the credentials look rightRead the result panel on the wizard — it reports the platform's own error. A 401 is a credential problem; a 404 means the path itself is not routed for your partnership.
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.
Amounts show in the wrong currencyThe dashboard formats with the currency of the store record's company. Set the company's currency — this is an Indonesian marketplace, so it is normally IDR.
The requests library is requiredrequests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo.
Editing a listing fails with "not found"Your build is older than 19.0.2.3.0 / 18.0.2.2.0 / 17.0.2.2.0, which sent product edits with the wrong HTTP method. Download the current build.

Platform status: read this before planning new work​

Tokopedia's Open API is being retired into TikTok Shop. developer.tokopedia.com now redirects to the TikTok Shop Partner Center, and of the operations this connector records, ten are still routed on the legacy FS host — the ones this module calls. The remainder are mapped and carry typed clients, but the host no longer serves them: each answers 404 where a made-up path answers the same 404.

The connector keeps the legacy FS surface working for grandfathered partners. For new integrations, use TikTok Store Management instead.

Version history​

Odoo versionVersion you download today
17.017.0.2.4.0
18.018.0.2.4.0
19.019.0.2.4.0

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

2.4.0 — 2026-09-25​

A hardening release. Every entry below is a failure a real store hit, and each one now carries a regression test, so none of them can come back. The module was audited against 36 known real-world failure cases across catalog, orders, money, reliability and access. All three Odoo versions are now built from the same code.

  • A second shop no longer swallows the first shop's records. Two Tokopedia shops that legitimately carry the same external order id used to collide: the second shop's sync matched the first shop's order and imported nothing, so the new shop looked empty. Products, orders and buyers are now bound to the shop that imported them, and records imported by an earlier build are adopted into their shop on the next sync rather than duplicated.
  • The whole catalogue is imported, not just the first page. The sync read one page and stopped, so a shop with more listings than a page imported a fraction of its catalogue and still reported success. It now follows the documented page/per_page contract to its final page, with a guard against a server that repeats a page.
  • Products arrive complete. The import carried only name, price, SKU and description, so listings lost their images, brand, category, Indonesian title and shop status. All of them are mapped now; an image the marketplace publishes as an opaque reference is kept as a reference rather than turned into a guessed URL.
  • Orders keep their money. Tax, subtotal, shipping, payment method and the marketplace's own currency are stored as Tokopedia reported them. A cross-currency import with no exchange rate on record is refused, instead of being converted 1:1 into your company currency.
  • Settlement statements are classified, not summed. Commission, transaction fee, shipping, platform and seller discounts, rewards, refunds and adjustments are stored as separate figures, so a fee can never absorb a refund. Refunds reconcile from the marketplace's own return records.
  • A partial or failed sync is reported as such, and never advances the "last successful sync" timestamp — a dashboard can no longer claim a sync that did not happen. The counters describe the run that just finished, rather than doubling each time you re-synced an unchanged catalogue.
  • One bad record no longer takes the batch down. Every record is imported in its own savepoint, and a failing record is reported without stopping the rest.
  • Credentials and buyer data no longer reach the logs or the stored webhook evidence — payloads are redacted before they are recorded, and buyer data the marketplace masks stays masked, with the screen saying so.
  • Connector roles see the connector's records and nothing else. They can read their own company's orders and lines, and the connector's rules leave shared Odoo models — sales orders, products, contacts — untouched for everybody else. Connector actions open the module's own compact screens instead of the full Sales and Contacts forms, and the external order id and buyer id are searchable there.
  • The dashboard shows a clear message when a load fails, an empty state when there is nothing to show, and keeps its contrast in dark mode.

2.3.0 — 2026-09-25​

  • Listing edits use the method the marketplace answers. 2.2.0 changed the product-edit call from PATCH to PUT on the finding that the gateway rejects PATCH. The finding was the wrong way round: PUT does not exist on this host at all — it answers "not found", exactly as a made-up path does — while PATCH reaches the route and asks for credentials. Editing a listing was sent into a 404. The call is PATCH again.
  • The dashboard and the sync button follow your company, and starting a synchronisation is now a manager action. Previously any signed-in user could read, and trigger, whichever store record came back first.
  • Money columns group and total correctly — the GoPay, PayLater and Affiliate lists showed amounts with no currency beside them, which breaks Odoo's list grouping and totals.
  • 17.0 and 18.0 caught up with 19.0: the TokoCabang warehouse list is reachable (it was advertised with no screen, menu or action behind it), the Tokopedia tab exists on products and sales orders, the dashboard no longer prints a dollar sign on an Indonesian marketplace, and the wizards no longer offer settings that no code read.

Support​