For Craft Commerce 5 · $99
Orders into sevDesk, under the right VAT rule
One German checkout produces four legally different invoices: a domestic sale at 19%, a reverse-charged supply to an EU business, an export outside the EU, and an OSS sale at the destination rate. sevDesk files whichever one you tell it to and never complains — you find out at the Umsatzsteuervoranmeldung. Sevvies works out which one it is.
Every invoice explains itself
The VAT rule is derived from the billing country and the customer's VAT ID, and the reason is stored on the order. When an accountant asks why a particular invoice is zero-rated, the answer is on the invoice — not in the source.
$ php craft sevvies/sync/preview 15841
VAT rule: Innergemeinschaftliche Lieferungen (taxRule 3)
Reason: EU business customer in AT with VAT ID
ATU12345678 — intra-community supply, reverse charge.
Commerce: 238.00 EUR
sevDesk: 238.00 EUR
# Printed on the document:
# Steuerfreie innergemeinschaftliche Lieferung — Reverse Charge,
# Steuerschuldnerschaft des Leistungsempfängers
Features
A VAT rule engine, a reconciliation guard and a duplicate index — not a POST request with your order stuffed into it.
The right VAT rule, per order
Domestic sales, exports outside the EU, intra-community supplies with reverse charge, §19 Kleinunternehmer and One Stop Shop — each derived from the billing country and the customer's VAT ID.
- The reason is recorded on the invoice, not just the rule
- The sentence German law requires is printed on the document
- VAT ID format checked against its own country's pattern
It will not file the wrong number
Every invoice is totalled before it is sent and checked against sevDesk's own total afterwards. A mismatch blocks the order rather than leaving a wrong document standing in your books.
- Disagrees before sending? Nothing is sent
- Disagrees after? Marked, with the sevDesk id kept so you can find it
- When the difference is exactly VAT, it names the setting to change
Never the same order twice
A unique database index on the order id, not a check that could lose a race with a queue retry or a status change.
- Status flips, retries and double webhooks are all safe
- Refunds are mirrored exactly once, as credit notes
- Nothing in sevDesk is ever deleted or altered
Dry run before it counts
Build every invoice exactly as it would for real, write the complete payload to the log, and send nothing. Check your VAT settings against your own orders before a single document reaches your books.
- The preview is the literal request, byte for byte
- From the CP, the Commerce order screen, or the console
- Backfill years of orders the same way
Contacts that stay one contact
Customers are matched to sevDesk contacts and the mapping is stored, so a repeat customer never produces a second contact — the thing that makes a sevDesk account unusable after a year of orders.
- Matched by email, with the result verified before it is used
- Customer numbers assigned by sevDesk itself
- Billing addresses kept in step when a customer moves
Payments, refunds and the archive
Book the payment when Commerce marks the order paid, mirror refunds as credit notes, and keep sevDesk's PDF as a Craft asset so the archive outlives the subscription.
- Full refunds reverse the invoice; partial ones get their own credit note
- Works with both sevDesk bookkeeping systems, 1.0 and 2.0
- A connection log with every request, decision and skip
Frequently Asked Questions
The questions worth answering before you install it.
$99 per Craft installation, one edition, everything included. Development and testing installs are free.
There is no free tier on purpose. A shop selling only domestically is exactly the customer who would take one — and the moment they sell one thing to an Austrian business, a cut-down edition would file it wrongly. A plugin whose free edition can produce a wrong bookkeeping document is worse than no free edition.
No. It checks that a VAT ID is structurally valid for its country — the right length, the right shape — which catches typos and pasted rubbish.
Confirming that a number is actually registered means calling VIES, which is frequently slow and occasionally down. Making your checkout depend on that is a bad trade, and treating a VIES timeout as “not registered” would charge VAT to a customer who should not pay it. Whether to verify registration is a decision with legal weight, and it stays yours.
No. A unique database index on the order id means one invoice row per order, enforced by the database rather than by a check that could race with a retry or a status change.
Nothing that affects your customers. Every trigger fails open — a sevDesk outage cannot stop a customer paying, and cannot stop Commerce recording that they did.
The invoice goes onto the queue and is retried. Sevvies distinguishes a temporary failure, which is worth retrying, from a rejected document, which would be rejected identically forever and is surfaced to you instead.
Both. sevDesk replaced tax types with VAT rules in its 2.0 bookkeeping system. Sevvies asks your account which system it is on and sends both forms, so an account migrating between them keeps working through the migration.
Yes, if you are registered for OSS. Turn it on and say whether you sell goods, electronic services or other services — sevDesk has a different rule for each. The destination country travels with the document, so sevDesk applies the destination rate.
Sevvies does not decide whether you should be registered for OSS, or track the distance-selling threshold. That is your tax adviser's job.
Yes, as credit notes, which is what reversing an invoice actually looks like in bookkeeping. A full refund reverses the invoice; a partial refund gets its own credit note filed against the original at the same VAT rate. Each Commerce refund is mirrored exactly once.
Yes — php craft sevvies/sync/pending backfills every completed order without an invoice. Do a dry run first: it builds and logs every payload without sending anything.
No. Sevvies creates documents and never deletes or alters one. “Forget this link” removes only Sevvies’ own record of an order, after which it can be filed again as if new.
No. It is an independent integration built against sevDesk’s public API. It is also not tax advice: Sevvies files what your Commerce setup charged, under the rule its configuration implies. Whether that treatment is correct for your business is between you and your tax adviser.
Stop filing invoices you have not checked
$99 per installation, one edition, everything included. Install it, turn on dry run, and see exactly what would be filed for your last hundred orders before any of it counts.