About
You are considering putting a one-person project in the path of your invoices. This page is the information you need to decide that, written the way we would want to read it.
Who builds this
Attestwire is built by Ben Harborne, in Woodside, California, USA. One person. There is no team page because there is no team, and a stock photo of a "team" would be the first lie on the site.
Attestwire is operated by Ben Harborne, a sole proprietor in Woodside, California, USA. A company will be formed before the first enterprise contract. Until then the contracting party on the terms is a named individual, which is worth knowing before you route production traffic here. It is also why the continuity section below exists rather than being left implied.
Why this exists
The EN 16931 rule set is public, and so are the Schematron files that
enforce it. Neither tells you what to do. A German invoice portal
rejects a document with something like
[BR-DE-15]-Das Element „Buyer reference“ (BT-10) muss übermittelt
werden, and if you do not already know that BT-10 is the
Leitweg-ID and that the buyer issues it, that string is a dead end. The
knowledge you need is not in the error; it is in a 200-page standard, a
national CIUS, and a portal's own quirks.
So the product is not "a validator". Validators exist. The product is the error message: the rule ID, the business term, what the rule actually requires, and the specific thing to change. Every rule has a page carrying the exact payload the library returns, including a note on where our check is stricter or narrower than the published rule — because a validator you cannot calibrate is not much use.
The dates are the other half of it. France, Germany, Poland and the UK are each mandating structured e-invoicing on their own schedule, and every SaaS company with European customers has to grow this capability whether or not it is their business. It should not cost them a quarter.
How it is built, and how narrow it is
One TypeScript library, @attestwire/en16931, MIT-licensed,
with no network calls and no dependencies on us at runtime. The
hosted API is the same library
behind an HTTP endpoint on Cloudflare Workers, for teams who would
rather not run it themselves. That is the whole system.
The narrowness is deliberate. Attestwire does not transmit invoices. We do not operate a Peppol access point, a French PDP or a KSeF connection, and we do not intend to — that is a regulated, capital-intensive business with different economics and a different risk profile. We produce and check the document; your access point moves it. Everything we ship is shaped to be handed straight to one.
We also do not store your invoices. The API processes a payload in memory and returns a result; nothing is written to a database, and there is no "history" tab because there is no history. The security page says exactly what happens to a payload and what we can see.
What happens if I stop
The honest answer to "what if you get bored, or hit by a bus" is not a promise about my health. It is that the escape hatch is already built and does not depend on me:
- The library is MIT-licensed. Once it is on npm — the publish is imminent, and this site will say so the day it happens — the version you depend on keeps working forever, offline, with no account and no calls home. You can fork it. That is the point of the licence.
- The hosted API is a convenience, not a lock-in. It runs the same code you can run yourself. Migrating off it is replacing an HTTP call with a function call.
- You get 60 days' notice. If the hosted API is discontinued we will email every account at least 60 days before it stops answering. That commitment is in the terms, not just on this page.
No amount of that makes a solo operation the same risk as a large vendor. It is the difference between a dependency that can disappear and one that can only stop being maintained.
How to reach a human
hello@attestwire.com
— that is the whole support system, and it reaches me directly. There is
no ticket portal, no chatbot, no tier-one queue.
support@attestwire.com routes to the same place.
You will get a reply within two business days, usually faster. I am one person in the Pacific time zone, so a question asked on a European morning is typically answered the same day, and a question asked on a Friday evening may wait until Monday. Bug reports, rule pages that are wrong, and "this error message did not help me" are all welcome and all get read — the last one especially, because that is the product failing at its one job.
Security reports: see the security page, or the same address.
Last updated . If this page changes materially we will say so here rather than silently swapping it.