FR EN
Contact us
← Back to the product page

Documentation

Installation, configuration, operations and troubleshooting.

Installation

The plugin is uploaded like any WordPress plugin: Plugins → Add New → Upload Plugin, then Activate. WooCommerce must be installed and active; otherwise a notice reminds you and the plugin stays inert.

To update, simply upload the new archive: WordPress detects the existing plugin and offers to replace it. Your settings and token are preserved.

Pro version — the Pro is a second plugin that installs alongside the free one, never instead of it. Install and activate the free plugin first, then the Pro: its tabs and features appear in the same settings page. If the free plugin is deactivated, the Pro goes dormant and tells you so.

Never keep two invoicing systems active at the same time on the same store (ours and another plugin): every order would be invoiced twice.

Connecting to Pennylane

Go to WooCommerce → Pennylane → Connection and paste your API token. You generate it in Pennylane under Settings → Connectivity → Developers.

The token needs three permissions: Customers read and write, Customer invoices read and write, Products read. The "Test connection" button checks all three separately and tells you which one is missing.

The token is encrypted before storage and never displayed again in clear text, neither in the interface nor in the logs.

Test mode

Test mode is on by default. While it is on, the plugin fully prepares the data — customer, invoice, credit note — writes it to the logs, and sends nothing to Pennylane.

This is how you validate your VAT configuration against real orders before writing anything into your accounting. A banner stays visible in the admin while the mode is on, so you cannot forget it.

Logs live under WooCommerce → Status → Logs, source pennylane.

Manual or automatic

By default, invoicing is manual: a "Pennylane" box appears at the top of every order screen, with a "Create invoice" button. Nothing leaves without your action.

To automate it, tick "Automatic invoicing" and pick the trigger statuses. On most stores a paid order moves to "Processing" — so that is the status to tick, not "Completed".

Either way, the invoice is created only once per order, whatever happens.

VAT, OSS and VIES

The tax regime is determined automatically from the billing country and the presence of a valid EU VAT number:

  • France — French VAT at the order rate.
  • European Union, business — reverse charge, exempt invoice with the matching legal wording.
  • European Union, consumer — destination country rate (OSS one-stop shop).
  • Outside the European Union — export exemption with its wording.

VIES validation, if you enable it, queries the official European Commission service. A number reported invalid never grants the exemption, even when its format is correct. If the service is unreachable, the order is never blocked: the number is re-checked at invoicing time and a note is added to the order.

B2B exemption at checkout (option) — off by default. When enabled, an EU business with a validated VAT number pays the net amount at checkout, and the invoice carries the intra-Community supply exemption mention (Article 138 of Directive 2006/112/EC). Two things to know before enabling it: these exempt sales require filing the EC Sales List — check with your accountant — and if VIES is unreachable at checkout time, VAT is charged (the exemption is never granted on format alone).

EU consumer sales (OSS) — a setting tells the plugin whether the store is OSS-registered. Not registered (EU sales under €10,000/year): French VAT is charged to all EU customers and invoices carry French VAT codes. Registered: each customer pays their own country rate and the invoice carries that country’s VAT code.

In every case, the invoice follows the money actually collected: if VAT was charged on an order, the invoice is issued with that VAT — never an exempt invoice against a gross payment. Any anomaly is noted on the order.

Set WooCommerce to two decimals. Any other setting produces rounding differences between the order and the invoice.

Invoice e-mails

Two templates to choose from.

Pennylane template — Pennylane writes and sends the e-mail. Wording, branding and sender are set in your Pennylane account, under Settings → Customer invoicing → Customisation. Careful: the default template includes a bank transfer request, even for an order already paid. Untick "Bank transfer" in the template payment conditions.

Our template — the e-mail is sent by your shop, with the layout and logo of your WooCommerce e-mails, your wording, and the Factur-X PDF attached. This is the recommended choice for an online store, where the customer has already paid.

Variables available in your wording: {prenom}, {nom}, {numero_facture}, {numero_commande}, {total}, {boutique}, {lien_facture}.

On a multilingual site, one wording block appears per language. Leave a language empty and the translated default wording is used.

Credit notes and reconciliation

Every WooCommerce refund, full or partial, creates a credit note in Pennylane, linked to the original invoice and carrying the refunded lines.

Reconciliation marks the invoice as paid in Pennylane as soon as the order is settled. On an online store the order is almost always paid before it is invoiced, so the marking happens a few seconds after the invoice is created.

If you enable e-mail delivery without enabling reconciliation, your customers will receive an invoice marked unpaid, with a payment request — for an order they have already paid. The plugin shows a permanent alert in that case.

Backfill

The Backfill tab lists orders in a trigger status that have no invoice. You pick a start date, review the list, and run the batch.

Each invoice keeps the original order date, which preserves the consistency of your accounting.

Monitoring

Three independent mechanisms stop you from discovering a problem weeks later.

  • Failure alerts — a summary e-mail as soon as an operation fails, grouped so it never exceeds one message per hour, with a direct link to each affected order.
  • Weekly summary — every Monday morning: invoices created, amount invoiced, errors pending, orders without an invoice.
  • Total consistency check — after each invoice, its total is compared to the order total; any mismatch is reported on the order and by alert.

Command line

Four WP-CLI commands, useful for diagnostics and larger stores.

wp pennylane test-connection
wp pennylane generate <order_id>
wp pennylane status <order_id>
wp pennylane backfill --from=2026-01-01 --dry-run

Developer customisation

The sensitive points are filterable, so the plugin can be adapted to a specific case without modifying its code.

// Tax regime applied to an order
add_filter( 'pw_tax_regime', function ( $regime, $order ) { … }, 10, 2 );

// VAT rate code of a line
add_filter( 'pw_vat_rate_code', function ( $code, $regime, $order, $item ) { … }, 10, 4 );

// Invoice payload before sending
add_filter( 'pw_invoice_payload', function ( $payload, $order ) { … }, 10, 2 );

// Invoice e-mail recipients
add_filter( 'pw_email_recipients', function ( $emails, $order ) { … }, 10, 2 );

Pro license

The Pro version is activated with a license key, e-mailed to you after purchase. Paste it under WooCommerce → Pennylane → License and click "Activate the license". One key covers one production site.

The license is re-checked automatically once a day, in the background. To move the key to another site — during a migration, for instance — click "Release this site" on the old site, then activate the key on the new one.

End of licence — without renewal, the plugin returns to the features of the free version: invoicing an order from its screen keeps working, with Pennylane’s legal numbering. Automatic invoicing, automatic credit notes, reconciliation, e-mails, bulk actions, backfill, alerts and updates stop. No data is deleted: renewing switches everything back on as it was. You get an e-mail a week before expiry, and a 14-day grace period lets a payment in progress go through.

Pro updates arrive under Dashboard → Updates, like any plugin, as long as the license is valid. The free version updates from WordPress.org.

Troubleshooting

The logs (WooCommerce → Status → Logs, source pennylane) record every call and every response. Here are the most common situations.

The button does nothing
Every manual action now shows a confirmation or error banner. If you see nothing, reload the page: a browser tab left open on an older state can save stale settings back.
Invoice not created automatically
Check that "Automatic invoicing" is ticked and that at least one trigger status is selected. Then check under WooCommerce → Status → Scheduled Actions that the task was created.
The customer receives a payment request
The invoice was sent before being marked as paid. Enable reconciliation, or switch to our own e-mail template where you control the wording.
E-mail never received
Look at the log: a 409 code means the PDF was not generated yet on the Pennylane side — the plugin retries automatically. Any other code appears in clear with the API message.
Total mismatch reported
Check the WooCommerce decimal setting and your tax configuration. The message shows both amounts being compared.

← Back to the product page