{"id":400815,"date":"2026-11-10T20:22:22","date_gmt":"2026-11-10T20:22:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/royalties-hq-for-woocommerce\/"},"modified":"2026-11-10T20:22:03","modified_gmt":"2026-11-10T20:22:03","slug":"royalties-hq-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/royalties-hq-for-woocommerce\/","author":15435117,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.1.4","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"Royalties HQ for WooCommerce","header_author":"Consilience Media Limited","header_description":"For book publishers: sends your WooCommerce book sales to Royalties HQ each month for royalty statements, or exports them as a Royalties HQ sales CSV. Requires a Royalties HQ account.","last_updated":"2026-11-10 20:22:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/royaltieshq.com","header_author_uri":"https:\/\/consil.co.uk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":92,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"consiliencemedia","date":"2026-11-10 20:22:03","revision":3795194}},"upgrade_notice":{"1.0.2":"<p>Security hardening of admin actions, and clearer privacy information.<\/p>","1.0.1":"<p>Paid orders released from hold, and paid pre-orders, are now reported instead of being missed.<\/p>","1.0.0":"<p>First release. Requires WooCommerce 9.2 or later and PHP 8.1 or later.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3795194,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3795194,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3795194,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3795194,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3795194,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3795194,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3795194,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3795194,"resolution":"4","location":"assets","locale":"","width":1280,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3795194,"resolution":"5","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"WooCommerce \u2192 Settings \u2192 Royalties HQ: paste the API address and token from Royalties HQ, and test the connection in one click.","2":"The status page: every month's status, totals and refund cut-off, with Build, Validate, Push and Download CSV.","3":"Unticked products: anything that sold but was left out, with a one-click Include.","4":"The Royalties HQ tab on a product: include it, give it a Royalties HQ product ID, or list the books in a bundle sold as one product.","5":"The Products list shows each product's Royalties HQ status, with bulk actions to include or exclude many at once."}},"plugin_section":[],"plugin_tags":[4956,1779,7143,221910,138902],"plugin_category":[],"plugin_contributors":[282319],"plugin_business_model":[],"class_list":["post-400815","plugin","type-plugin","status-publish","hentry","plugin_tags-authors","plugin_tags-books","plugin_tags-publishing","plugin_tags-royalties","plugin_tags-sales-reports","plugin_contributors-consiliencemedia","plugin_committers-consiliencemedia"],"banners":{"banner":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/banner-772x250.png?rev=3795194","banner_2x":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/banner-1544x500.png?rev=3795194","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/icon-128x128.png?rev=3795194","icon_2x":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/icon-256x256.png?rev=3795194","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/screenshot-1.png?rev=3795194","caption":"WooCommerce \u2192 Settings \u2192 Royalties HQ: paste the API address and token from Royalties HQ, and test the connection in one click."},{"src":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/screenshot-2.png?rev=3795194","caption":"The status page: every month's status, totals and refund cut-off, with Build, Validate, Push and Download CSV."},{"src":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/screenshot-3.png?rev=3795194","caption":"Unticked products: anything that sold but was left out, with a one-click Include."},{"src":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/screenshot-4.png?rev=3795194","caption":"The Royalties HQ tab on a product: include it, give it a Royalties HQ product ID, or list the books in a bundle sold as one product."},{"src":"https:\/\/ps.w.org\/royalties-hq-for-woocommerce\/assets\/screenshot-5.png?rev=3795194","caption":"The Products list shows each product's Royalties HQ status, with bulk actions to include or exclude many at once."}],"raw_content":"<!--section=description-->\n<p>This plugin is for book publishers who sell from their own WooCommerce shop and want to make book royalties easy using <a href=\"https:\/\/royaltieshq.com\">Royalties HQ<\/a>. Every sale of a book earns royalties for its authors and other rights holders. This plugin adds up each book's sales every month and sends them to Royalties HQ, ready for your next royalty run. No more wrangling of manually exported spreadsheets.<\/p>\n\n<p>Royalties HQ imports the figures alongside your other sales channels, so your shop's sales appear on the next royalty statements with ease.<\/p>\n\n<p><strong>Requires a Royalties HQ account.<\/strong> No sales are sent until you connect the plugin to your account and switch sending on. Before that, the plugin contacts Royalties HQ only when you click \"Test connection\", which checks your API address and token and sends no sales.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Monthly sales, per book.<\/strong> Units sold, units returned and net receipts for each book, in your shop's currency.<\/li>\n<li><strong>Automatic or manual.<\/strong> Leave it to send each month on a schedule you choose, or switch to manual and send one month at a time when you are ready.<\/li>\n<li><strong>Only the products you choose.<\/strong> Tick \"Include in Royalties HQ\" on your books. Tote bags, gift cards and other stock stay out. An \"Unticked products\" report shows anything that sold but was left out, so nothing is missed by accident.<\/li>\n<li><strong>ISBNs from where you keep them.<\/strong> The SKU, WooCommerce's GTIN\/ISBN field, or a custom field. Invalid ISBNs are flagged, not sent.<\/li>\n<li><strong>Refunds handled properly.<\/strong> A refund made before a month is sent reduces that month's sales. A later refund is reported in the month it happened, so a month already sent is never changed.<\/li>\n<li><strong>Held orders are never lost.<\/strong> A paid order you put on hold counts once you release it. If its month has already been sent, it is reported in the month you release it. It is never counted twice, even if you put it on hold again later.<\/li>\n<li><strong>Pre-orders your way.<\/strong> A pre-order paid in advance is reported in the month it was paid, like any other sale. Or choose to report pre-orders only when they are released. Works with pre-order plugins that give pre-orders their own order status, such as WooCommerce Pre-Orders.<\/li>\n<li><strong>Bundles split fairly.<\/strong> Sales of bundles made with WPC Product Bundles, YITH WooCommerce Product Bundles or Easy Product Bundles are shared between the books inside them. You can also define the books in a bundle you sell as a single product.<\/li>\n<li><strong>Your deductions.<\/strong> Optionally deduct a store commission, card fees (a flat percentage or the fee your payment gateway recorded) and count shipping as revenue.<\/li>\n<li><strong>Check before you send.<\/strong> Build any month, check its totals, download it as a Royalties HQ sales CSV, or run a dry run to test it against your account without importing anything.<\/li>\n<li><strong>A clear status page.<\/strong> Every month's status, totals and refund cut-off in one place, with an email to you if a month needs attention.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>No customer data leaves your shop: no names, email addresses or postal addresses, and no order details. No tax amounts are sent either. Royalties HQ receives each included book's monthly sales totals, the book's identifiers, title and list price, your shop's currency, country and time zone, your deduction settings and your site's address. \"External service\" below lists exactly what is sent and when.<\/p>\n\n<p>Royalties HQ is a service of Consilience Media Limited (registered in England and Wales, company number 04214205), which publishes and maintains this plugin as the official WooCommerce integration for its own platform. WooCommerce is a trademark of Automattic Inc.; this plugin is an independent integration and is not affiliated with or endorsed by Automattic.<\/p>\n\n<h3>External service (Royalties HQ)<\/h3>\n\n<p>This plugin sends data to Royalties HQ, at the API address you enter in its settings: your publisher's own Royalties HQ account, such as <code>https:\/\/yourpress.royaltieshq.com\/api\/v1<\/code>. It sends nothing anywhere else.<\/p>\n\n<ul>\n<li><strong>What:<\/strong> for each month, and for each product you tick, its identifiers (ISBN, SKU or Royalties HQ product ID), title, list price, units sold and returned and net receipts excluding tax, with your shop's currency, base country and time zone. It also sends counts of what was left out and the deduction settings used. Every request carries your API token and names the plugin, its version and your site's address.<\/li>\n<li><strong>When:<\/strong> each month on your push schedule (automatic mode) or when you click Push (manual mode); when you click Validate, Send now or Test connection; retries of a push that Royalties HQ asked to be repeated later; a daily check of your connection's details and which months Royalties HQ already holds; and a check of the saved connection when you open the Royalties HQ settings tab while sending is on. No sales are sent until you have saved an API address and token and ticked \"Send sales to Royalties HQ\". Before that, the only request is a Test connection you click yourself: it sends the API token you entered, the plugin's name and version and your site's address, and no sales.<\/li>\n<li><strong>Settings in wp-config.php:<\/strong> <code>ROYALTIES_HQ_WOO_API_TOKEN<\/code> sets the API token instead of the settings screen. <code>ROYALTIES_HQ_WOO_ALLOW_HTTP<\/code> allows an API address that is not HTTPS; leave it unset on a live shop.<\/li>\n<\/ul>\n\n<p>Your use of Royalties HQ is governed by its <a href=\"https:\/\/royaltieshq.com\/terms\/\">Terms<\/a> and <a href=\"https:\/\/royaltieshq.com\/privacy-policy\/\">Privacy Policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce (version 9.2 or later).<\/li>\n<li>Install this plugin through Plugins \u2192 Add New, or upload it to <code>\/wp-content\/plugins\/royalties-hq-for-woocommerce\/<\/code>, and activate it.<\/li>\n<li>In Royalties HQ, go to Settings \u2192 Integrations \u2192 API and create a WooCommerce connection. Copy the API address and token it shows you. The token is only shown once.<\/li>\n<li>In WordPress, go to WooCommerce \u2192 Settings \u2192 Royalties HQ. Paste the API address and token, click \"Test connection\", and save.<\/li>\n<li>Tick \"Include in Royalties HQ\" on each book. For a book sold in several formats (a variable product), tick each format you want included, or use the \"Include\" bulk action on the Products list to include every format at once.<\/li>\n<li>Choose automatic or manual push mode, tick \"Send sales to Royalties HQ\", and save.<\/li>\n<\/ol>\n\n<p>To see how a month will look before sending anything, go to WooCommerce \u2192 Royalties HQ and click \"Build\" next to it.<\/p>\n\n<p>The plugin works with WooCommerce's High-Performance Order Storage.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20royalties%20hq%20account%3F\"><h3>Do I need a Royalties HQ account?<\/h3><\/dt>\n<dd><p>Yes. The plugin sends sales to your Royalties HQ account, which works out the royalties. Without one you can still build months and download them as a CSV.<\/p><\/dd>\n<dt id=\"when%20are%20sales%20sent%3F\"><h3>When are sales sent?<\/h3><\/dt>\n<dd><p>In automatic mode, on the push day you choose (the 15th by default) of the month after each cycle. Monthly is the default and is recommended, but you can choose every 2, 3, 4, 6 or 12 months to match your royalty periods. Waiting until mid-month lets refunds from the first couple of weeks reduce the month they belong to.<\/p>\n\n<p>In manual mode, nothing is sent until you click Push on the status page, one month at a time, oldest first.<\/p><\/dd>\n<dt id=\"what%20if%20i%20sell%20things%20that%20aren%27t%20books%3F\"><h3>What if I sell things that aren't books?<\/h3><\/dt>\n<dd><p>Leave them unticked. Only products ticked \"Include in Royalties HQ\" are counted. The \"Unticked products\" report lists anything that sold in a month but wasn't included, so you can include it and rebuild the month if it should have been.<\/p><\/dd>\n<dt id=\"my%20isbns%20aren%27t%20in%20the%20sku%20field.\"><h3>My ISBNs aren't in the SKU field.<\/h3><\/dt>\n<dd><p>Under WooCommerce \u2192 Settings \u2192 Royalties HQ, set ISBN source to the GTIN\/ISBN field or to the custom field your shop uses. A product without a valid ISBN is sent with its SKU, or with the Royalties HQ product ID you set on it.<\/p><\/dd>\n<dt id=\"how%20are%20pre-orders%20and%20orders%20on%20hold%20handled%3F\"><h3>How are pre-orders and orders on hold handled?<\/h3><\/dt>\n<dd><p>An order counts as a sale once it is paid and is processing, completed or, by default, a paid pre-order. An order on hold is left out until you release it. If its month has already been sent by then, it is reported in the month you release it, and the status page lists it as reported late. Once an order has been reported it stays reported, so putting it on hold and releasing it again never counts it twice. Refunds and cancellations of it are taken off the month it was reported in, or reported later if they come after that month was sent.<\/p>\n\n<p>Under WooCommerce \u2192 Settings \u2192 Royalties HQ, \"Paid pre-orders\" chooses when a pre-order paid in advance is reported. \"Report when paid\" (the default) reports it in the month it was paid. \"Report when released\" waits until it leaves pre-order for processing or completed. A pre-order that is charged when it is released is reported once it has been paid, whichever you choose.<\/p><\/dd>\n<dt id=\"can%20i%20fix%20a%20month%20after%20it%20has%20been%20sent%3F\"><h3>Can I fix a month after it has been sent?<\/h3><\/dt>\n<dd><p>Yes, until Royalties HQ imports it. Rebuild the month and push it again; Royalties HQ replaces what it holds. Once a month has been imported into royalty statements, it must be undone in Royalties HQ before it can be sent again.<\/p><\/dd>\n<dt id=\"can%20i%20try%20it%20without%20importing%20anything%3F\"><h3>Can I try it without importing anything?<\/h3><\/dt>\n<dd><p>Yes. Use a test token from Royalties HQ. Pushes are then checked in full but nothing is imported, and the status page shows \"validated (test key)\".<\/p><\/dd>\n<dt id=\"does%20it%20slow%20my%20shop%20down%3F\"><h3>Does it slow my shop down?<\/h3><\/dt>\n<dd><p>It shouldn't. Months are built in the background, a batch of orders at a time, using the same job queue WooCommerce uses for its own background work.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Its settings, the saved API token and its queued jobs are removed. Its record of each month built and sent, the Royalties HQ fields on your products and the dates it recorded on orders (when each was cancelled, and when each first counted as a sale) are kept, in case you reinstall, unless you tick \"Delete all data on uninstall\" in its settings first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Every admin action now checks its security nonce and your permissions before it reads anything else from the request.<\/li>\n<li>The readme now says exactly what is sent to Royalties HQ, and that Test connection sends no sales. The Privacy Policy link is fixed.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>A paid order released from hold after its month was sent is now reported in the month it is released. Before, it was never sent.<\/li>\n<li>An order that has been reported stays reported if it is later put on hold, so it is never counted twice.<\/li>\n<li>Paid pre-orders count as sales. A new \"Paid pre-orders\" setting reports them when paid (the default) or when released.<\/li>\n<li>The status page shows how many sales in a month were reported late.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"For book publishers: sends your WooCommerce book sales to Royalties HQ every month, ready for your next royalty run. No more exported spreadsheets.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/400815","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=400815"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/consiliencemedia"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=400815"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=400815"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=400815"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=400815"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=400815"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=400815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}