- Every request is checked in the unit tests against the official eBay OpenAPI files (tests/samples/official-operations.json).
by Kavio Labs · for OpenCart 4.1.x
Sells your OpenCart catalogue on eBay with your own developer keyset: OAuth connection, 13 marketplaces, category and item specifics mapping, price rules and stock buffer, listings through the Sell Inventory API, bulk stock and price sync, paid orders imported as real OpenCart orders, shipping fulfillment with tracking from the order history, a job queue with retries and a full log. Credentials stored encrypted, sandbox and production. OpenCart 4, events and cron only, no OCMOD.
Sells your OpenCart catalogue on eBay with your own developer keyset: OAuth connection, 13 marketplaces, category and item specifics mapping, price rules and stock buffer, listings through the Sell Inventory API, bulk stock and price sync, paid orders imported as real OpenCart orders, shipping fulfillment with tracking from the order history, a job queue with retries and a full log. Credentials stored encrypted, sandbox and production. OpenCart 4, events and cron only, no OCMOD.
Your OpenCart shop on eBay. This extension connects your shop to your own eBay seller account so that listings, stock, price and orders move without copy and paste. It is a two-way connector: products go out, paid orders and tracking come back into your shop.
eBay Marketplace Connector works with OpenCart 4.1.0.4.
We list the builds we install and test on. “Tested” means the test plan ran on that build; “Supported” means the build is inside the supported range.
| Version | Range | Runs on | Status |
|---|---|---|---|
| OpenCart 4.1.0.x | 4.1.0.0 – 4.1.0.4 | PHP 8.1 – 8.3 | Tested on 4.1.0.4 |
| OpenCart 4.0.2.x | 4.0.2.0 – 4.0.2.3 | PHP 8.0 – 8.2 | Supported |
The Documentation tab covers the settings and every screen.
OpenCart 4.1.0.4. Tested on OpenCart 4.1.0.4. The Compatibility tab lists every version range.
No. They work through OpenCart events and standard extension types (modules, order totals, themes). No core file edits, no OCMOD patches, no theme template edits, so OpenCart updates and other extensions keep working.
One production store domain with every subdomain (www, shop., staging.), plus local development hosts such as localhost, *.local and *.test. A store on another domain needs its own license; a second-store license is 40% off. You have 14 days after installing to enter the key. 12 months of updates and support are included; after that the extension keeps working and renewals are 50% off. How licensing works
Yes. Ask for a full refund within 30 days of your first purchase, no reason needed: open a ticket or write to [email protected] with your order number. The money goes back to the card or bank account you paid with within 5 business days of approval. Refund policy
Open a ticket from your account, so your license details are attached. We answer Monday to Friday: bug reports within 1 business day, how-to questions within 2. Support policy. Not a customer yet? Ask a pre-sales question.
12 more answers about setup and daily use in the Documentation tab.
eBay Marketplace Connector sells your OpenCart catalogue on eBay with your own eBay developer keyset. You map your categories and item specifics once, set your price rules and stock buffer, and the extension publishes your products through the eBay Sell Inventory API, keeps stock and price in sync in bulk, imports paid eBay orders as real OpenCart orders, and reports the tracking number back to eBay as a shipping fulfillment.

What it does
eBay is a trademark of eBay Inc. This extension is an independent product by Kavio Labs, not affiliated with, endorsed or sponsored by eBay Inc.
Requires OpenCart 4.1 (tested on 4.1.0.4), PHP 7.4 or newer with the cURL and OpenSSL extensions.
<your shop>/index.php?route=extension/kv_ebay/channel/ebay.oauth.kv_ebay.ocmod.zip and click Install.Before eBay issues Production keys for your own keyset, every application must either subscribe to eBay's Marketplace Account Deletion notifications or opt out of them. This is done once per keyset in your eBay developer account (Application Keys > Notifications > Alerts and Notifications); source: https://developer.ebay.com/marketplace-account-deletion.
The extension polls eBay and exposes no notification endpoint. You therefore have two ways:
_ and -). eBay sends GET <endpoint>?challenge_code=... and expects {"challengeResponse": SHA-256 hex of challengeCode + verificationToken + endpoint}; notifications then arrive as POST requests that you must acknowledge. When one arrives, delete the buyer's personal data from the imported OpenCart orders.Sandbox keys do not need this step.
Upload the new package in Extensions > Installer. Settings, credentials and data are kept; missing tables and settings are added on the first request after the update. See CHANGELOG.
Extensions > Extensions > Modules > eBay Marketplace Connector > Uninstall removes the mappings, rules, queue, log and the stored credentials and tokens. The OpenCart orders that were imported stay, and listings created on eBay stay on eBay.
Extensions > Extensions > Modules > eBay Marketplace Connector > Edit. The page also holds the licence card.
| Setting | Default | Description |
|---|---|---|
| Enable the connector | On | When off, no new work is started. Jobs of work that is already under way are still processed. |
| Status of imported orders | Processing | Order status given to a new eBay order (Processing takes the stock). The status mapping on the Rules page can override it. |
| Debug log | Off | Also stores every HTTP call with masked request and response. Secrets are never stored. |
| Log retention (days) | 90 | Older log entries are removed by the cron run. |
| Sync interval (minutes) | 15 | How often stock and price are pushed, orders imported and shipments reported (every run of the cron address). |
Credentials are stored encrypted (AES-256-GCM, key derived from your store's own encryption key), never shown again, and an empty secret field keeps the saved value.
| Field | Description |
|---|---|
| Mode | Test uses the Sandbox keyset (api.sandbox.ebay.com); Live uses the Production keyset (api.ebay.com). |
| Client ID / Client secret | The App ID and Cert ID of your keyset (one pair for Sandbox, one for Production). |
| Marketplace | EBAY_US, EBAY_GB, EBAY_DE, EBAY_FR, EBAY_IT, EBAY_ES, EBAY_AU, EBAY_CA, EBAY_NL, EBAY_IE, EBAY_AT, EBAY_CH or EBAY_PL. Sets the currency and the language of the listings. |
| RuName (Sandbox / Production) | The redirect URL name of the keyset. Its auth accepted URL is the address shown on the page. |
| Fulfillment / payment / return policy ID | IDs of your eBay business policies for the marketplace ("Show my policies" lists them). Every offer references them. |
| Inventory location key and address | The merchant location key of a warehouse in your eBay account; "Create location" creates one from the address fields. |
| New offers | Publish at once, or keep unpublished (you publish in Seller Hub). |
The authorization (access and refresh token) is stored encrypted next to the keyset and is removed when the keyset changes or on Disconnect.
Markup in percent and a fixed amount, price endings, list price from your special prices or a percent, exchange rate (1 = use the OpenCart currency of the marketplace currency code), stock buffer, zero limit, maximum, default weight, brand source (manufacturer or a product attribute), automatic listing, the own-carrier tracking switch, tracking link template and the status mapping from eBay to OpenCart order statuses. Markup can also be set per category (Categories page) and per product.
The install registers an hourly entry in the OpenCart cron (Extensions > Cron Jobs). For a faster sync call the secret web address shown on the settings page every few minutes:
https://your-shop.example/index.php?route=extension/kv_ebay/channel/ebay.cron&key=<secret>
Overlapping runs are prevented. A wrong key answers 403.
Tracking: ABC123 carrier: UPS. The order page shows the number found. At the next sync the extension creates the shipping fulfillment at eBay for the order lines with that carrier and tracking number, once. Use a carrier name eBay knows (USPS, UPS, DHL, Royal Mail ...); an unknown name is sent as entered.
Run the queue by hand on the Jobs page with "Run the queue now".
Returns, cancellations and refunds are handled in eBay Seller Hub; the extension shows no Returns page and no cancel button. Variation listings, auctions, used conditions and more than one inventory location are not supported.
Technical notes for developers who customize eBay Marketplace Connector for OpenCart. The API client (src/Client/Api.php), the mapper and the driver are shared in design with the CS-Cart add-on; tests/unit.php checks every request the client sends against tests/samples/official-operations.json.
eBay is a trademark of eBay Inc. This extension is an independent product by Kavio Labs, not affiliated with, endorsed or sponsored by eBay Inc.
| Item | Value |
|---|---|
| Extension code | kv_ebay (licence id kv_oc_ebay) |
| Admin route | extension/kv_ebay/channel/ebay (module settings: extension/kv_ebay/module/kv_ebay) |
| PHP namespace | KavioLabs\KvEbay (library in system/library/ of the extension) |
| Tables | oc_kv_ebay_accounts, _product_map, _order_map, _category_map, _attr_map, _options, _jobs, _log, _cache, _batches, _returns |
| Settings keys | module_kv_ebay_* (module_kv_ebay_base_url overrides every host for tests) |
| Class | Role |
|---|---|
Client\BaseClient | HTTP (cURL, TLS verification, timeouts), JSON, error mapping, masked logging, response headers |
Client\Api | The eBay calls: OAuth (consent URL, code exchange, refresh, application token), Sell Inventory, Sell Fulfillment (own host), Sell Account, Commerce Taxonomy |
Drivers\EBay\Mapper | Pure translation between hub arrays and eBay JSON, unit tested with the samples in tests/samples |
Drivers\EBay\Driver | Hub driver: create, update, publish, bulk inventory, order pull, shipping fulfillment |
Hub\* | Channel independent layer: listings, categories, rules, orders, shipments, product map |
Store | OpenCart access: products, categories, order creation, order status, tracking from the history |
Queue, Jobs | Job queue with back-off 5 min / 15 min / 1 h / 3 h / 12 h, overlap lock |
Accounts, Secret | Credentials and tokens sealed with AES-256-GCM |
Controllers: admin/controller/channel/ebay.php (pages and actions), catalog/controller/channel/ebay.php (cron, oauth accept URL, invoice link, stock event). No OCMOD, no core edits.
Verified 2026-11-06 against the OpenAPI files published by eBay (tests/samples/official-operations.json, unit-tested: every request the client sends in tests/unit.php must match an operation in that file). Versions: Inventory 1.18.5, Fulfillment v1.20.7, Account v1.9.3, Taxonomy v1.1.1. The mock server in tests/mock-server/server.js follows the same files.
| Purpose | Request | Official source |
|---|---|---|
| Authorization code exchange, refresh, application token | POST /identity/v1/oauth2/token (HTTP Basic of the keyset; authorization_code with the RuName as redirect_uri, refresh_token, client_credentials) | OAuth guide, https://developer.ebay.com/api-docs/static/oauth-authorization-code-grant.html (not an OpenAPI file) |
| Consent page | https://auth.ebay.com/oauth2/authorize (Sandbox: auth.sandbox.ebay.com) with client_id, response_type=code, redirect_uri = RuName, scope, state | same guide |
| Connection test | GET /sell/account/v1/privilege | https://developer.ebay.com/api-docs/sell/account/overview.html (Account v1.9.3) |
| Business policies | GET /sell/account/v1/fulfillment_policy, /payment_policy, /return_policy with marketplace_id | Account v1.9.3 |
| Default tree | GET /commerce/taxonomy/v1/get_default_category_tree_id?marketplace_id= | https://developer.ebay.com/api-docs/commerce/taxonomy/overview.html (Taxonomy v1.1.1) |
| Category tree | GET /commerce/taxonomy/v1/category_tree/{category_tree_id} | Taxonomy v1.1.1 |
| Item specifics | GET /commerce/taxonomy/v1/category_tree/{category_tree_id}/get_item_aspects_for_category?category_id= | Taxonomy v1.1.1 |
| Location | POST /sell/inventory/v1/location/{merchantLocationKey} | https://developer.ebay.com/api-docs/sell/inventory/overview.html (Inventory 1.18.5) |
| Inventory item | PUT /sell/inventory/v1/inventory_item/{sku} with Content-Language and X-EBAY-C-MARKETPLACE-ID | Inventory 1.18.5 |
| Find offer | GET /sell/inventory/v1/offer?sku=&marketplace_id=&limit= | Inventory 1.18.5 |
| Create offer | POST /sell/inventory/v1/offer | Inventory 1.18.5 |
| Update offer | PUT /sell/inventory/v1/offer/{offerId} | Inventory 1.18.5 |
| Publish offer | POST /sell/inventory/v1/offer/{offerId}/publish | Inventory 1.18.5 |
| Bulk stock and price | POST /sell/inventory/v1/bulk_update_price_quantity (at most 25 requests per call) | Inventory 1.18.5 |
| Orders | GET /sell/fulfillment/v1/order?filter=lastmodifieddate:[...]&limit=200&offset= on apiz.ebay.com | https://developer.ebay.com/api-docs/sell/fulfillment/overview.html (Fulfillment v1.20.7) |
| Shipping | POST /sell/fulfillment/v1/order/{orderId}/shipping_fulfillment with lineItems, shippedDate, shippingCarrierCode, trackingNumber | Fulfillment v1.20.7 |
| Marketplace Account Deletion | Not served by the extension (it polls); the owner subscribes or opts out per keyset | https://developer.ebay.com/marketplace-account-deletion |
Set the setting module_kv_ebay_base_url (development only) to the address of the mock, for example http://127.0.0.1:11901; one URL then serves the OAuth host, api.ebay.com and apiz.ebay.com.
node tests/mock-server/server.js 11901 starts the stand-in (token endpoint, Inventory, Fulfillment, Account, Taxonomy).php tests/unit.php runs the unit tests (PHP 8.1 and 8.3).node tests/e2e.js runs the browser test against a dev store with the extension installed.No. Events and the OpenCart cron only.
OpenCart 4.1 (tested on 4.1.0.4). There is no OpenCart 3 edition.
Yes, a free one. You create your own application keyset (App ID and Cert ID) and a RuName at developer.ebay.com, and grant the application access to your seller account once. Nothing is shared with other merchants.
Yes. eBay requires every application either to subscribe to them or to opt out before Production keys are issued. The extension exposes no notification endpoint, so you subscribe with an endpoint you operate or use eBay's exemption. See "Marketplace Account Deletion notifications" in Installation.
In your own database, encrypted with a key derived from your store's encryption key. They are never shown again after saving.
No. The extension talks to eBay only. The licence check sends your domain name to the Kavio Labs licence server once a day.
The 13 marketplaces in the Marketplace list on the Connection page. One account sells on one marketplace.
No. Version 1.0 creates fixed price listings for single products, condition New. Handle the rest in eBay Seller Hub.
No. Use eBay Seller Hub.
"Not authorized" or "connect again". The refresh token expired (about 18 months), was revoked, or the keyset changed. Press "Connect to eBay" again.
Press "Connect to eBay" and eBay shows an error. Check that the RuName belongs to the keyset and mode you use and that its auth accepted URL is exactly the address on the Connection page, over https.
A product shows "Required attribute ... has no value". Map that item specific on Attributes (or give a fixed value) and press Retry.
A product shows an eBay policy or location error. Check the three policy IDs and the location key on Connection ("Show my policies").
Jobs fail, wait and are retried (5 minutes up to 12 hours). Nothing is lost and nothing is sent twice.
New work stops. The admin pages stay open and work already under way is finished.
Install the new package over the old one. Support: write to us from your purchase page.
Buy with confidence
This product was tested on this build. Builds we did not test are not listed.
Updates and support are included in the price. The product keeps working afterwards; renewing is optional.
How licensing worksIf it is not what you expected, tell us within 30 days and we refund the order.
Refund policyPay by card, Apple Pay or Google Pay on Stripe's secure page. Your card number never reaches our server.
Ask a pre-sales questionSold by Kavio Labs Software Limited, registered in England and Wales No. 17532441. About us
More for OpenCart
Server-side tracking for OpenCart 4.x and 3.0.x: purchases, refunds, add to cart, checkout, product views and leads go from your server to the free official GA4 Measurement Protocol, Meta Conversions API and TikTok Events API, deduplicated with the browser pixels through shared event ids. Consent-aware, SHA-256 hashed customer data, order status mapping, queue with retries, test mode and an event log. No paid relay, events only, no OCMOD.
The department store theme for OpenCart 4.x and 3.0.x: colour-coded departments, a department list beside the hero slider with two side promos, a big search with a department selector, tabbed product blocks, a 2 + 1 + 2 offer grid, deals of the day with real countdowns, a department showcase, a promotions band and a three-column product page with a sticky buy box. Four styles (Meridian, Harbor, Citrus, Night) and your own colours on top. Events only, no core changes.
Stop AI crawlers, scrapers, vulnerability scanners and unwanted countries before OpenCart 4.x or 3.0.x builds a page. Googlebot and Bingbot are verified by DNS and always allowed; 50+ bots get one switch each; country rules use free GeoIP databases and can close only the checkout; IP and network lists, rate limits, honeypots and the cart flood fix; a one-second challenge instead of a captcha; learning mode, dashboard, log, IP tester and Cloudflare export. No core changes, no OCMOD.