{"id":378773,"date":"2026-10-26T13:32:22","date_gmt":"2026-10-26T13:32:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/paperwork-invoices-e-invoicing-documents-for-woocommerce\/"},"modified":"2026-10-26T13:32:03","modified_gmt":"2026-10-26T13:32:03","slug":"paperwork-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/paperwork-for-woocommerce\/","author":16290396,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Paperwork \u2013 Invoices & Documents for WooCommerce","header_author":"U2Code","header_description":"Invoices, credit notes, packing slips and more for WooCommerce, with numbering that never skips, an archive that never changes, and a visual template designer.","assets_banners_color":"eef4f1","last_updated":"2026-10-26 13:32:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/paperwork.u2code.com\/","header_author_uri":"https:\/\/u2code.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":93,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"bycrik","date":"2026-10-26 13:32:03","revision":3766527}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3766503,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3766503,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3766503,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3766503,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3766503,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3766503,"resolution":"1","location":"assets","locale":"","width":2049,"height":1281},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3766503,"resolution":"2","location":"assets","locale":"","width":1240,"height":1753},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3766503,"resolution":"3","location":"assets","locale":"","width":2049,"height":1281},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3766503,"resolution":"4","location":"assets","locale":"","width":2049,"height":1281},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3766503,"resolution":"5","location":"assets","locale":"","width":2049,"height":1281},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3766503,"resolution":"6","location":"assets","locale":"","width":2049,"height":1281},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3766503,"resolution":"7","location":"assets","locale":"","width":2049,"height":1281},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3766503,"resolution":"8","location":"assets","locale":"","width":2049,"height":1281}},"screenshots":{"1":"The order panel: documents for an order, with download, regenerate and void.","2":"The invoice, as a customer receives it.","3":"The template designer, with blocks arranged per document type.","4":"The setup wizard's document step, choosing which types a shop needs.","5":"Numbering settings, with the format preview and the next number.","6":"A document's history: allocated, issued, emailed, voided \u2014 with who, when and why.","7":"Bulk export from the orders list.","8":"Diagnostics, reporting what is configured and what is not."}},"plugin_section":[],"plugin_tags":[181403,12480,51080,57399,286],"plugin_category":[45],"plugin_contributors":[161125],"plugin_business_model":[],"class_list":["post-378773","plugin","type-plugin","status-publish","hentry","plugin_tags-credit-note","plugin_tags-invoice","plugin_tags-packing-slip","plugin_tags-pdf-invoice","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-bycrik","plugin_committers-bycrik"],"banners":{"banner":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/banner-772x250.png?rev=3766503","banner_2x":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/banner-1544x500.png?rev=3766503","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/icon.svg?rev=3766503","icon":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/icon.svg?rev=3766503","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-1.png?rev=3766503","caption":"The order panel: documents for an order, with download, regenerate and void."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-2.png?rev=3766503","caption":"The invoice, as a customer receives it."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-3.png?rev=3766503","caption":"The template designer, with blocks arranged per document type."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-4.png?rev=3766503","caption":"The setup wizard's document step, choosing which types a shop needs."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-5.png?rev=3766503","caption":"Numbering settings, with the format preview and the next number."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-6.png?rev=3766503","caption":"A document's history: allocated, issued, emailed, voided \u2014 with who, when and why."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-7.png?rev=3766503","caption":"Bulk export from the orders list."},{"src":"https:\/\/ps.w.org\/paperwork-for-woocommerce\/assets\/screenshot-8.png?rev=3766503","caption":"Diagnostics, reporting what is configured and what is not."}],"raw_content":"<!--section=description-->\n<p>Paperwork issues the documents a WooCommerce shop is required to keep, and keeps them the way an\nauditor expects to find them: numbered without gaps, stored as issued, and explainable months later.<\/p>\n\n<p>A default install does one thing \u2014 an invoice on a paid order \u2014 and stays out of the way. Five\nfurther document types are there when a shop needs them and switched off until then, and ten more\ncome with the premium version.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Invoices, packing slips and credit notes<\/strong>, attached to the emails you choose, downloadable from\nMy Account, and available in bulk from the orders list.<\/li>\n<li><strong>Numbering that does not skip.<\/strong> Numbers are allocated atomically, so two orders completing at the\nsame moment cannot take the same one. When a number is never used, the Status page counts it and\n  wp paperwork gaps says which, and why, from the audit trail.<\/li>\n<li><strong>An archive, not a renderer.<\/strong> A document is rendered once, at the moment it is issued, and every\nlater download serves that same file. An invoice a customer received in March still says in\nDecember what it said in March, whatever has changed in your settings since.<\/li>\n<li><strong>A visual template designer.<\/strong> Drag the blocks your documents are made of, per document type, with\nyour own logo, colours and wording. Templates are data, so they survive updates.<\/li>\n<li><strong>Sixteen document types<\/strong> in all. Six in the free plugin \u2014 invoice, credit note, proforma,\nreceipt, packing slip and delivery note \u2014 and ten in the premium version: quotes, order\nconfirmations, deposit and balance invoices, statements, gift receipts, return forms, pick lists,\nshipping and address labels.<\/li>\n<li><strong>Written for real shops.<\/strong> HPOS-compatible, multilingual-aware, RTL-aware, and every template is\noverridable from your theme.<\/li>\n<\/ul>\n\n<h4>E-invoicing (premium)<\/h4>\n\n<p>For shops that have to file electronically, the premium version serialises one EN 16931 semantic model into\nUBL 2.1, Peppol BIS 3.0, CII D16B, Factur-X and ZUGFeRD, and XRechnung. Each document is validated\nagainst a shipped XSD before it is allowed out, and the report says which business rules were\nchecked rather than implying an official rule set was run.<\/p>\n\n<p>E-invoicing is <strong>off by default and stays off until you review your VAT categories<\/strong>, because a\nwrong VAT category is a filing error rather than a rendering glitch. An unmapped tax rate produces no\ndocument and names the rate instead of guessing.<\/p>\n\n<h4>Free and premium<\/h4>\n\n<p>Everything above is free except where the premium version is named. Premium adds the fulfilment,\nsales, automation and compliance capabilities: shipping labels, pick lists, per-shipment documents,\nreturns, quotes, statements, deposit and balance invoices, the export centre, cloud backups,\nautomatic printing, the REST API, the payment helpers, VAT validation, e-invoicing and Peppol\ndelivery.<\/p>\n\n<p>The plugin in the WordPress.org directory is the free version and contains none of the premium\ncode. The premium version is a separate download from https:\/\/paperwork.u2code.com\/, and a shop\nthat stops paying for it keeps every document it has ever issued: losing access stops new documents\nbeing made, it never removes old ones.<\/p>\n\n<h4>External services<\/h4>\n\n<p>Paperwork does not need an account or an API key for anything it does. Two connections can exist,\nboth of them yours to make:<\/p>\n\n<ul>\n<li><strong>Freemius.<\/strong> The plugin includes the Freemius SDK, which offers the premium version and, only if\nyou opt in when asked after activation, sends anonymous usage data (site address, WordPress and\nplugin versions, the admin e-mail address) to Freemius. Nothing is sent before you opt in, and\ndeclining changes nothing about how the plugin works. Terms: https:\/\/freemius.com\/terms\/ \u2014\nprivacy policy: https:\/\/freemius.com\/privacy\/<\/li>\n<li><strong>A Chromium conversion service.<\/strong> Optional, off by default. If you switch the Chromium renderer\non and enter the address of a Gotenberg-compatible service you run, the HTML of each document\nrendered that way is sent to that address and the PDF comes back. The plugin ships with no such\nservice and names none.<\/li>\n<\/ul>\n\n<h4>Source code<\/h4>\n\n<p>The template designer is a React application. It ships compiled, in <code>assets\/designer\/<\/code>, and as\nsource, in <code>js-source\/<\/code>. To rebuild it from source:<\/p>\n\n<pre><code>cd js-source &amp;&amp; npm install &amp;&amp; npm run build\n<\/code><\/pre>\n\n<p>Everything else is plain PHP, CSS and JavaScript, shipped as written. The PHP libraries in\n    vendor-prefixed\/ are unmodified copies of their upstream releases, namespaced to avoid clashes.<\/p>\n\n<h4>Built to be checked<\/h4>\n\n<p>This plugin is developed against acceptance scripts that run on a real shop rather than only against\nunit tests: a thousand numbers pulled by twenty parallel workers, five hundred orders exported at\nonce, and every admin screen opened over real HTTP. Where something cannot be verified \u2014 a service\nwith no account, a format whose official validator will not run on PHP \u2014 the plugin says so in its\nown diagnostics rather than claiming otherwise.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce 8.0 or newer. Paperwork declares WooCommerce as a required\nplugin and will not run without it.<\/li>\n<li>Upload the plugin through <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or install it from the plugin\ndirectory, then activate it.<\/li>\n<li>The setup wizard opens on activation. Seven short steps: your company details, which documents you\nwant, how they are numbered, how they look, and when they are sent. Skip it and the defaults issue\nan invoice on a paid order.<\/li>\n<li>Settings afterwards live under <strong>WooCommerce \u2192 Settings \u2192 Paperwork<\/strong>.<\/li>\n<\/ol>\n\n<p>Requires PHP 8.1 or newer. No external service, account or API key is needed for anything described\nunder \"What it does\".<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20high-performance%20order%20storage%3F\"><h3>Does it work with High-Performance Order Storage?<\/h3><\/dt>\n<dd><p>Yes. Paperwork declares HPOS compatibility and reads orders through the WooCommerce order API, never\nthrough post meta, so it behaves the same with the legacy tables or with HPOS.<\/p><\/dd>\n<dt id=\"will%20my%20invoice%20numbers%20have%20gaps%3F\"><h3>Will my invoice numbers have gaps?<\/h3><\/dt>\n<dd><p>Not from Paperwork's side. Numbers are allocated atomically, so concurrent orders cannot collide or\nskip, and a voided document keeps its number, so voiding leaves no gap either. A gap can still\nappear when a render fails after its number was drawn; the audit trail records that as an orphaned\nallocation. The Status page counts the gaps of every sequence, and <code>wp paperwork gaps<\/code> lists each\nmissing number with the reason from the audit trail, which is the answer an auditor is actually\nasking for.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20documents%20if%20i%20switch%20a%20document%20type%20off%3F\"><h3>What happens to my documents if I switch a document type off?<\/h3><\/dt>\n<dd><p>Nothing. Switching a type off stops new documents of that type being created. Every document already\nissued stays in the archive, stays downloadable from My Account, stays attached to the emails your\ncustomers have already received, and stays in bulk export. Disabling is not deletion.<\/p><\/dd>\n<dt id=\"can%20i%20edit%20an%20invoice%20after%20it%20has%20been%20issued%3F\"><h3>Can I edit an invoice after it has been issued?<\/h3><\/dt>\n<dd><p>Not in place, deliberately \u2014 that is the point of an archive. You can regenerate a document, which\nissues a new version and retires the old one while keeping both, and you can void one with a reason.\nBoth are recorded in the audit trail.<\/p><\/dd>\n<dt id=\"do%20factur-x%20and%20zugferd%20produce%20a%20single%20pdf%3F\"><h3>Do Factur-X and ZUGFeRD produce a single PDF?<\/h3><\/dt>\n<dd><p>E-invoicing is part of the premium version. There, Factur-X and ZUGFeRD embed their XML in a\nPDF\/A-3, which needs an optional second PDF engine the premium version can install on request;\nwithout it, the XML is produced alongside the PDF and a warning is recorded, and an ordinary PDF is\nnever labelled as Factur-X.<\/p><\/dd>\n<dt id=\"can%20paperwork%20send%20my%20invoices%20over%20peppol%3F\"><h3>Can Paperwork send my invoices over Peppol?<\/h3><\/dt>\n<dd><p>Peppol delivery is part of the premium version, and requires an account with an access point\nprovider: Paperwork builds and signs the request and hands it over. It is not a Peppol access point\nitself, and it will tell you it is not connected until you have configured one.<\/p><\/dd>\n<dt id=\"are%20my%20pdfs%20publicly%20accessible%3F\"><h3>Are my PDFs publicly accessible?<\/h3><\/dt>\n<dd><p>No. Documents are stored outside the web root's reach with directory listing and direct access\nblocked, and customer links are signed and time-limited.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20templates%20in%20my%20theme%3F\"><h3>Can I change the templates in my theme?<\/h3><\/dt>\n<dd><p>Yes. Copy a template out of the plugin's <code>views\/frontend\/<\/code> directory into\n    your-theme\/paperwork-for-woocommerce\/ and edit it there. Everything a template needs is passed to it\nexplicitly, so a template never has to query anything.<\/p><\/dd>\n<dt id=\"is%20there%20wp-cli%20support%3F\"><h3>Is there WP-CLI support?<\/h3><\/dt>\n<dd><p>Yes: generating, regenerating, voiding, listing, exporting, renumbering and a gap report, plus\n    wp paperwork doctor, which runs every diagnostic check and exits non-zero if one fails.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0 - 2026-09-16<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>New: Settings tab under WooCommerce \u2192 Settings.<\/li>\n<\/ul>","raw_excerpt":"Invoices, credit notes, packing slips and more for WooCommerce: numbering without gaps, an archive that never changes, and a visual template designer.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/378773","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=378773"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bycrik"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=378773"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=378773"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=378773"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=378773"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=378773"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=378773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}