{"id":380693,"date":"2026-10-10T02:19:18","date_gmt":"2026-10-10T02:19:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quoshop-for-woocommerce\/"},"modified":"2026-10-10T02:18:45","modified_gmt":"2026-10-10T02:18:45","slug":"quoshop-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/it.wordpress.org\/plugins\/quoshop-for-woocommerce\/","author":23581480,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.3","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"QuoShop for WooCommerce","header_author":"QuoSuite","header_description":"Connects a WooCommerce store to QuoShop (QuoSuite e-commerce): published catalogue, prices and stock synced from the ERP, orders sent to QuoShop to generate the ERP sales documents, signed webhooks.","assets_banners_color":"417dab","last_updated":"2026-10-10 02:18:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/quosuite.com\/docs\/quoshop\/guides\/woocommerce","header_author_uri":"https:\/\/quosuite.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":67,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"quosuite","date":"2026-10-10 02:18:45","revision":3737520}},"upgrade_notice":{"1.2.0":"<p>Maintenance release for the WordPress.org directory. Settings, the connection and synced data are unchanged.<\/p>","1.1.0":"<p>Prices now always come from the QuoShop price including tax, which fixes orders refused for a total mismatch when WooCommerce taxes are disabled. Every synced product is rewritten once after the update.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3737517,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3737517,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3737517,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3737517,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3737517,"resolution":"1","location":"assets","locale":"","width":1440,"height":912},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3737517,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3737517,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3737517,"resolution":"4","location":"assets","locale":"","width":1440,"height":815},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3737517,"resolution":"5","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"Overview tab: connection, live catalogue progress, orders to check, webhooks and background jobs.","2":"Connection: paste a QuoShop key \u2014 QuoSuite's API address is built in.","3":"Choose the QuoShop store this WooCommerce shop sells for.","4":"Settings: QuoShop store, content language and what to synchronise.","5":"The first catalogue import running, with live progress."}},"plugin_section":[],"plugin_tags":[12827,26218,12448,1564,286],"plugin_category":[45],"plugin_contributors":[285464],"plugin_business_model":[],"class_list":["post-380693","plugin","type-plugin","status-publish","hentry","plugin_tags-erp","plugin_tags-invoicing","plugin_tags-stock","plugin_tags-synchronization","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-quosuite","plugin_committers-quosuite"],"banners":{"banner":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/banner-772x250.png?rev=3737517","banner_2x":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/banner-1544x500.png?rev=3737517","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/icon-128x128.png?rev=3737517","icon_2x":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/icon-256x256.png?rev=3737517","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/screenshot-1.png?rev=3737517","caption":"Overview tab: connection, live catalogue progress, orders to check, webhooks and background jobs."},{"src":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/screenshot-2.png?rev=3737517","caption":"Connection: paste a QuoShop key \u2014 QuoSuite's API address is built in."},{"src":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/screenshot-3.png?rev=3737517","caption":"Choose the QuoShop store this WooCommerce shop sells for."},{"src":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/screenshot-4.png?rev=3737517","caption":"Settings: QuoShop store, content language and what to synchronise."},{"src":"https:\/\/ps.w.org\/quoshop-for-woocommerce\/assets\/screenshot-5.png?rev=3737517","caption":"The first catalogue import running, with live progress."}],"raw_content":"<!--section=description-->\n<p>QuoShop for WooCommerce links your WooCommerce store to your QuoSuite workspace through the public QuoShop API, with a QuoShop key \u2014 never your QuoSuite login.<\/p>\n\n<ul>\n<li><strong>Catalogue, QuoShop \u2192 WooCommerce<\/strong>: published products are created and kept up to date \u2014 title, descriptions, images, price incl. tax (promotions included), stock and availability, categories. Withdrawn products become drafts, never deleted.<\/li>\n<li><strong>Orders, WooCommerce \u2192 QuoShop<\/strong>: paid (or processing) orders are sent to QuoShop, which posts them to the ERP: customer found by email, invoice for the full amount, stock, payment matched. Exactly once \u2014 a retry, a lost response or a double click never creates a second order or a second invoice.<\/li>\n<li><strong>Statuses, both ways<\/strong>: completing or cancelling an order in WooCommerce updates QuoShop; shipping or cancelling it in QuoSuite updates WooCommerce.<\/li>\n<li><strong>Signed webhooks<\/strong>: QuoShop pushes stock, product and order changes within seconds; each delivery is verified (HMAC-SHA256, 5-minute window) and processed once. A scheduled pass (every 15 minutes to daily) catches anything missed.<\/li>\n<li><strong>Live overview<\/strong>: connection, catalogue pass progress, orders to check, webhooks and background jobs at a glance.<\/li>\n<\/ul>\n\n<p>Source of truth: QuoShop \/ the QuoSuite ERP owns products, prices and stock. WooCommerce owns its checkout, customers and order flow.<\/p>\n\n<p>Full documentation: https:\/\/quosuite.com\/docs\/quoshop\/guides\/woocommerce<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A QuoSuite workspace with QuoShop (https:\/\/quosuite.com) and a QuoShop API key.<\/li>\n<li>WooCommerce 8.0 or later, PHP 7.4 or later with the <code>sodium<\/code> extension (bundled with PHP 7.2+).<\/li>\n<li>Simple products: variable products are not synchronised yet.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a connector: it cannot work without QuoShop, the e-commerce service of QuoSuite ERP, operated by Tunbeta Tunisia SUARL. Nothing is sent before you paste a QuoShop key and click <strong>Connect<\/strong>.<\/p>\n\n<p>It talks to the QuoSuite public API, server to server, authenticated with your QuoShop key:<\/p>\n\n<ul>\n<li><strong>When you connect, and on each scheduled sync<\/strong> (every 15 minutes to daily, as you choose): the plugin reads your published catalogue, prices and stock. Product images are downloaded from the addresses QuoShop returns (QuoSuite's media servers).<\/li>\n<li><strong>When an order reaches the status you chose<\/strong> (paid by default): the plugin sends the order \u2014 order number, date, currency, line items (SKU, quantity), shipping cost, total, payment method, and the customer's name, e-mail address, phone number, billing and shipping addresses and order note \u2014 so that QuoSuite can create the customer and issue the invoice.<\/li>\n<li><strong>When an order is completed, cancelled or paid later<\/strong>: its new status or payment.<\/li>\n<li><strong>When you register the endpoint<\/strong>: your site's webhook address (<code>\/wp-json\/quoshop\/v1\/webhook<\/code>). QuoShop then sends signed notifications (stock, product and order changes) to that address.<\/li>\n<\/ul>\n\n<p>No data is sent to any other service, and nothing about your site's visitors is collected.<\/p>\n\n<ul>\n<li>QuoSuite terms of use: https:\/\/quosuite.com\/terms-of-use<\/li>\n<li>QuoSuite privacy policy: https:\/\/quosuite.com\/privacy-policy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>In QuoSuite, <strong>Settings \u203a API &amp; Integrations \u203a QuoShop keys \u203a New key<\/strong>: name it \u201cWooCommerce\u201d, leave <em>Allowed domains<\/em> empty (server-to-server), grant <code>catalog:read<\/code>, <code>inventory:read<\/code>, <code>orders:write<\/code> and <code>webhooks:write<\/code> (add <code>customers:write<\/code> if your store refuses guest orders). Copy the key (<code>qsh_\u2026<\/code>): it is shown once.<\/li>\n<li>In WordPress, <strong>Plugins \u203a Add New \u203a Upload Plugin<\/strong>, choose <code>quoshop-for-woocommerce-x.y.z.zip<\/code>, then <strong>Activate<\/strong>.<\/li>\n<li><strong>WooCommerce \u203a QuoShop<\/strong>: paste the key and click <strong>Connect<\/strong>, then choose your store in the list (chosen automatically when your workspace has only one). The catalogue import starts at once.<\/li>\n<li>On the <strong>Overview<\/strong> tab, click <strong>Register the endpoint<\/strong> (webhooks).<\/li>\n<\/ol>\n\n<p>The key can also be defined in <code>wp-config.php<\/code>: <code>define( 'QUOSHOP_API_KEY', 'qsh_\u2026' );<\/code>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"my%20key%20was%20revoked%20or%20has%20expired\"><h3>My key was revoked or has expired<\/h3><\/dt>\n<dd><p>The plugin pauses (no API call), shows a notice explaining what to do, and keeps queueing orders. Create a new key in QuoSuite and paste it in WooCommerce \u203a QuoShop: queued orders are sent at once.<\/p><\/dd>\n<dt id=\"an%20order%20says%20%E2%80%9Cnot%20sent%20to%20quoshop%E2%80%9D\"><h3>An order says \u201cNot sent to QuoShop\u201d<\/h3><\/dt>\n<dd><p>The order note gives the reason: insufficient stock, a product without SKU, a coupon or fee QuoShop cannot reproduce (its orders carry catalogue prices), a currency mismatch. Fix it, then click <strong>Send to QuoShop now<\/strong> on the order, or <strong>Retry failed orders<\/strong> in the settings.<\/p><\/dd>\n<dt id=\"can%20i%20edit%20a%20synced%20product%20in%20woocommerce%3F\"><h3>Can I edit a synced product in WooCommerce?<\/h3><\/dt>\n<dd><p>WooCommerce-only fields (tags, upsells, shipping class, custom fields, your own categories) are yours. Fields owned by QuoShop (title, descriptions, SKU, prices, stock, images, QuoShop categories) are overwritten at the next sync: edit them in QuoSuite.<\/p><\/dd>\n<dt id=\"which%20prices%20are%20used%3F\"><h3>Which prices are used?<\/h3><\/dt>\n<dd><p>The QuoShop prices <strong>including tax<\/strong>, the ones QuoShop invoices: the WooCommerce total is then the QuoShop total. If WooCommerce adds tax to the prices entered, the price excluding tax is derived from the price including tax (6 decimals) so the checkout total stays the same; WooCommerce\u2019s tax rates must then match QuoSuite\u2019s.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20hpos%3F\"><h3>Does it work with HPOS?<\/h3><\/dt>\n<dd><p>Yes: high-performance order storage and the legacy posts storage are both supported and tested.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Ready for the WordPress.org directory: passes Plugin Check. Every request to QuoShop goes through the WordPress HTTP API (the bundled SDK no longer ships its cURL fallback), and each bundled file refuses direct access.<\/li>\n<li>Translations: language packs from translate.wordpress.org are used when installed; the bundled French translation fills in otherwise.<\/li>\n<li>Error messages are escaped where they are raised; the plugin's own table is queried with prepared identifiers.<\/li>\n<li>Settings page header shows the QuoSuite logo.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Prices: always from the QuoShop price incl. tax. With WooCommerce taxes disabled, the price excl. tax used to be imported and orders were refused for a total mismatch. Products are rewritten once after the update.<\/li>\n<li>Connection with the key only (QuoSuite\u2019s API address is built in); the store is chosen from the list of the workspace\u2019s stores, the content language from the store\u2019s languages.<\/li>\n<li>New Overview tab: live progress of catalogue passes, last and next runs, orders to check, last webhook received, late background jobs.<\/li>\n<li>Catalogue and stock cycles from every 15 minutes to daily; a full resync rewrites every product; a running pass can be stopped.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: catalogue and stock sync, order export with strict idempotency, status and payment updates, signed webhooks, French translation.<\/li>\n<\/ul>","raw_excerpt":"Connects WooCommerce to QuoShop (QuoSuite e-commerce): catalogue, prices and stock from the ERP; orders sent to QuoSuite, which issues the invoices.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380693"}],"author":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/quosuite"}],"wp:attachment":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380693"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380693"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380693"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380693"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380693"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}