Skip to main content

Coupang Store Management

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

Technical namecoupang_store_management
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.0 → 17.0.2.3.1, 18.0 → 18.0.2.3.1, 19.0 → 19.0.2.3.1
Price$499 USD — one-time, per Odoo version
Odoo module licenceOPL-1 (Odoo Proprietary License v1.0)
CategoryConnector
One download per Odoo major version

Your dashboard offers the file that matches the Odoo version your order is for. A 17.0 download is not a substitute for the 19.0 one — the three builds are separate code trees, and the version you install must match the Odoo series you run. If you later upgrade Odoo, you need the build for the new series.

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 Coupang Wing seller account with Open API access

Install the Python package 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 order's Odoo version — that is expected, see the warning above.

2. Extract into your addons path​

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

The module must end up as a single top-level coupang_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 Coupang Store Management and click Install.
  3. Odoo pulls in the Odoo apps listed above automatically.

There is nothing else to install. The module has no companion package and no separate licence client — everything it needs is inside the ZIP.

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

Licence​

coupang_store_management ships under the Odoo Proprietary License v1.0 (OPL-1). There is no activation key and nothing to switch on after install: installing the module on a database you are licensed for is the whole of it.

The licence permits use on the Odoo databases your purchase covers and forbids redistribution. The LICENSE and COPYRIGHT files inside the module carry the full text; the module footer and the App Store listing carry the same terms.

Configuration​

Connect to Coupang​

Create a connection record on the coupang.configuration model — Coupang → Configuration → Settings. The fields the model defines for the connection are:

FieldTechnical nameTypeRequired
Configuration NamenameCharYes
Access Keyaccess_keyCharYes
Secret Keysecret_keyCharYes
Vendor IDvendor_idCharYes
Primary MarketmarketSelectionYes
Companycompany_idMany2oneYes
Sandbox ModesandboxBooleanNo
Timeout (seconds)timeoutIntegerNo
Base URLbase_urlCharNo
Webhook Secretwebhook_secretCharNo
Coupang URLcoupang_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.

Fields on the screen vs fields on the model

The connection form renders Configuration Name, Access Key, Secret Key, Vendor ID, Timeout, Company, Coupang URL and Notes, plus the sync checkboxes below. market (Primary Market), sandbox, base_url, marketplace and webhook_secret exist on the record but are not rendered on the form: market defaults to Korea and sandbox to off, so a standard Korea connection needs neither.

The form carries these behaviour checkboxes: sync_products, sync_orders, sync_customers, sync_inventory, auto_sync_products, auto_sync_orders and auto_sync_customers, with sync_frequency selecting the cadence. 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 webhook signing secret lives on the coupang.webhook record (see Public endpoints below), not on the connection.

The module's own source contacts these hosts: api-gateway.coupang.com, wingtest.coupang.com, developers.coupangcorp.com, wing.coupang.com. Your firewall must allow outbound HTTPS to them.

Public endpoints this module exposes​

The connector serves one externally reachable endpoint. The path is relative to your Odoo base URL (web.base.url), so the address you register on the platform looks like https://erp.example.com/coupang/webhook.

EndpointMethodAuthPurpose
/coupang/webhookPOSTPublic (unauthenticated)Receives Coupang webhook deliveries. This is the URL to register as your notification destination in the Coupang seller portal.

/coupang/webhook fails closed. A delivery is acknowledged only after an active webhook record (model coupang.webhook, status active) verifies the delivery's signature against the raw request body and headers. Anything that fails verification is answered HTTP 403 and nothing is processed from it, so the endpoint being publicly reachable does not make it publicly usable. Rejected deliveries are written to the Odoo log with the calling IP address.

Create and enable the webhook record — with its signing secret — before you register the URL on the platform; until one exists, every delivery is refused.

The record to create is a coupang.webhook: name, delivery_url and secret are required, and it must have active on and status set to active. The module does not ship a menu screen for this model yet, so create the record from Settings → Technical → Database Structure → Models → coupang.webhook (or ask us and we will do it with you). That screen gap is on our list; the endpoint itself is complete and fails closed today.

Scheduled actions​

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

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

Using the module​

The module's menu is laid out as:

  • Coupang → Dashboard
  • Coupang → Products
  • Coupang → Orders
  • Coupang → Customers
  • Coupang → Operations — Import Wizard, Export Wizard, Mapping Wizard, Test Connection, Logs, Reports
  • Coupang → 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 rather than raised at the user.

Coupons and promotions​

The coupon operations are available on the coupang.coupon records and through the sync service. The module uses Coupang's instant-discount coupon API: create, list by status, and expire. It does not offer an update or delete action, because Coupang publishes neither: to change a live coupon, expire it and create a new one. Coupang publishes no separate discount-promotion API; the "active promotions" view lists the coupons that are currently applied. A coupon you have already exported is refreshed one row at a time, so a single rejected coupon cannot take the run down with it.

Troubleshooting​

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. A rejected record is rolled back on its own, so the records around it still import.
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 requests library is requiredrequests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo.
"… is not available: Coupang publishes no Open API operation for it"The action has no Coupang API — reviews, seller performance scores, sales statistics, webhook subscription, message-queue polling, standalone image upload, shipping-time history, Rocket Growth dispatch, return rejection or direct refunds. Nothing was sent to Coupang; handle it in Wing.

HTTP endpoints​

The module registers three JSON endpoints and one file download of its own, in addition to the inbound webhook.

EndpointMethodPurpose
/coupang/webhookPOSTReceives Coupang event deliveries. Public, and fail-closed: a delivery is acknowledged only after an active webhook record verifies its signature; anything else is rejected with HTTP 403.
/coupang/api/statusPOST (JSON-RPC)Connection status and the last product / order / buyer sync times, for the connections of the companies you are working in.
/coupang/api/syncPOST (JSON-RPC)Starts a synchronization. Requires the Coupang Manager group, and only for a connection of a company you are working in.
/coupang/dashboard/dataPOST (JSON-RPC)The dashboard payload (KPIs, sales chart, order status, recent activity).
/coupang/import/templateGETDownloads the CSV import template (?type=product or ?type=customer) with exactly the columns the Import Wizard reads. Requires a signed-in user.

All three JSON endpoints require a signed-in user. None of them accepts credentials in the request body.

Version history​

Odoo versionVersion you download today
17.017.0.2.3.1
18.018.0.2.3.1
19.019.0.2.3.1

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

What changed in 19.0.2.3.1​

  • The dashboard opens again. A template error stopped the Coupang dashboard from loading on every Odoo version; it now shows your KPIs, charts and sync status.
  • Clear dashboard states. While the figures load you see placeholders rather than zeros; if loading fails, a message with Try again appears at the top; and before any store is connected, one panel explains how to connect it (Connect a Coupang store, Setup guide). A chart with nothing to show says so ("No orders in this period").
  • Dark mode. The dashboard follows Odoo's dark theme, including chart axes and legends.
  • Orders menu for Coupang users. A Coupang user no longer meets an Access Error when opening Coupang → Orders. Members of Coupang Manager also receive Sales / User: All Documents, so a manager who is otherwise limited to their own sales documents sees every order the sync imports.
  • Coupang lists. Coupang → Orders shows the order reference, Coupang order ID, customer, date, total and Coupang status; Coupang → Customers shows the name, Coupang customer ID, email and sync status.
  • Configurations are no longer filtered to connected stores, so a store you have just created is visible straight away.
  • Empty lists explain themselves. Returns, Settlements, Refunds and Collections say what will appear and how to get it. On a phone, Settlements and Returns open as cards.

What changed in 19.0.2.3.0​

  • Every API call goes to an address Coupang publishes. The connector's calls were rebuilt on the operations listed on developers.coupang.com — products and item price, stock and sale status; order sheets; waybill upload; returns and cancellations; shipping and return locations; categories and brands; customer inquiries; settlement; Rocket Growth inventory; and instant-discount coupons. Earlier builds addressed routes Coupang does not publish, so those calls could not succeed.
  • Requests are signed exactly as Coupang documents. The signature now covers the full request path with the query appended directly; earlier builds were rejected at authentication.
  • The connection test checks a real, vendor-scoped endpoint, so a green result means your keys and vendor ID are accepted.
  • Coupons use the instant-discount coupon API (create, list by status, expire).
  • Product and return lists page the way Coupang does (nextToken), so large catalogues are read in full.
  • Sandbox Mode no longer sends to a host that does not exist. Coupang publishes no sandbox or test gateway; with Sandbox Mode on, the connector now stops with a clear message and sends nothing. Test with your own vendor account instead.
  • Actions with no Coupang API stop with a clear message and send nothing — reviews, seller performance, sales statistics, webhook subscription, message-queue polling, standalone image upload, shipping-time history, Rocket Growth dispatch and stock adjustment, return rejection and direct refunds.

What changed in 19.0.2.2.2​

  • A failed or partial sync no longer advances the "last synced" time, and the synced counters report what the last run actually created or refreshed.
  • The dashboard's period window has a real end date, so a historical range no longer counts today, and the Failed tile counts orders that could not sync instead of cancelled ones.

What changed in 19.0.2.2.1​

  • The dashboard, the status endpoint and the sync button now respect company boundaries. Every one of them read the connection with elevated rights and none of them carried a company filter, so a user working in one company could be shown another company's connection, orders, buyers and sync history — and could start that connection's synchronization. Each read is now scoped to the companies you are working in.
  • Manual synchronization requires the Coupang Manager group. The sync button on the connection, the sync buttons on the dashboard and the sync endpoint all require Settings → Users → Coupang Manager. The scheduled actions are unaffected, so automatic syncs keep running.
  • The dashboard is a pure read. It used to create its own record when one was missing, so two people opening it at the same time raced for the same row. Nothing is written now.
  • Dashboard figures use your company currency. The money tiles are formatted with the currency symbol of the company you are working in, and every aggregate is bounded, so the screen stays fast as your order history grows.
  • An unknown settlement currency is no longer assumed to be Korean won. Coupang trades in Korea, Taiwan and Singapore; when the platform does not state a currency, the record falls through to your company currency.

Support​