Start free. Pay when you need more documents.
free is free. The paid plans buy more documents, not different features.
The hosted API checks invoice data or creates an e-invoice file from your software. The free plan includes 100 documents a month, with no card. What counts as a document.
Choose a monthly allowance
Free
$0
No card, no expiry
100 documents a month
Build the integration and run real development traffic.
Enough to wire the integration up and run a real month of a side project.
Starter
$49/mo
or $490/yr billed annually, two months free
2,500 documents a month
For small production integrations and early customer rollouts.
2,500 docs ≈ monthly invoicing for ~80 SMB customers.
Scale
$199/mo
or $1,990/yr billed annually, two months free
25,000 documents a month
For established billing products and higher-volume workflows.
25,000 docs ≈ a mid-size billing platform issuing ~800 invoices a day.
The hosted API checks invoice data and generates EN 16931, XRechnung and Peppol BIS 3 XML. It accepts JSON or UBL/CII XML and reports the rule, field and suggested correction. It does not write a PDF or send invoices. Country-specific Peppol rules may require additional checks. See all limits.
New to Attestwire? Start free.
Your key appears on this page the moment you submit. No inbox visit, no confirmation link.
Or create it from your terminal: the same call, one curl
curl -sX POST https://api.attestwire.com/v1/keys \
-H content-type:application/json \
-d '{"email":"you@example.com"}'Store this key now. It is shown once and cannot be recovered. We keep only its SHA-256 hash.
The curl and Node.js snippets post a conformant
en16931 invoice with your key
already in it, so your first call answers
valid: true. Each validation spends one of the
100 documents your free key gets each month,
including the teaching example below.
Or run one deliberate error instead
An XRechnung invoice with its buyer reference removed. The
response is valid: false with exactly one
BR-DE-15 finding, naming the rule,
the business term and the fix. It costs a document like any other
call.
Already have a key? Upgrade.
Same key, same integration. Just a bigger allowance.
Or from your terminal
curl -X POST \
https://api.attestwire.com/v1/billing/checkout \
-H 'content-type: application/json' \
-d '{"key":"YOUR_API_KEY","plan":"starter"}'The link is single-use. Full flow, with every error code: api.attestwire.com/docs#upgrade.
Only fixing one rejected invoice?
The Invoice Fix Report costs $99 once. You get a signed validation record, guidance for each finding, 30 days of Starter API access and a reply from a person within one business day. Start with the free check; it may be all you need.
What counts
One successful POST /v1/validate,
POST /v1/parse or POST /v1/generate is one document, whatever its size: we
count calls, not findings. A refusal does not consume one. Quotas are per
key and reset at 00:00 UTC on the 1st, with no rollover. Keys, usage and
health calls are free, and the library is not metered at all.
Questions before you choose
Who answers when something breaks?
Ben, in California, at hello@attestwire.com. Two business days is the target on every plan. A paid plan buys a larger allowance; support is the same on every plan, and there is no support SLA on any plan.
Is Free a trial?
No. No expiry date, no card on file, and the allowance resets each month.
What happens at the limit?
The API returns 429 with quota_exceeded, and
a refused call does not consume a document. We do not bill overage.
Can I cancel?
Yes, in the billing portal. Cancellation takes effect at the end of the period you have already paid for, then your key returns to Free, and we would rather refund a month than argue about one. See the terms and refund policy.
Are invoices stored?
No. They are processed in memory and returned to you. See security. An Article 28 DPA is available.
Does Attestwire transmit invoices?
No. It checks and writes invoice documents and is not connected to
any delivery network: it is not a Peppol access point, a French PDP
(certified sending platform) or a KSeF (Polish national system)
connection. A valid: true result is a technical check,
and a receiver may still refuse the invoice.
Read the terms or
see the boundary.
Need more than 25,000 documents a month?
Email hello@attestwire.com for OEM or volume pricing. The price depends on the integration.
The operational ceilings, if you are sizing retry logic
Four limits apply to a key in use and one applies before you have a
key. Each returns its own error code, so none of them is reported as
quota_exceeded. /v1/validate and
/v1/generate are paced at
10 requests per second
per key, with a bucket that lets a burst of
20 through.
Going over is
429 with rate_limited and a
Retry-After header, and nothing is charged: a paced
refusal leaves your monthly allowance untouched and the same request
works a second later. The two codes are kept separate because the
waits differ: a rate limit clears in about a second, a quota clears
next month.
Any request body over 1 MB is
refused with 413 and payload_too_large, and
on this API that is the ceiling you meet first, for a JSON invoice
object and for a file alike. The reader has a second one underneath
it, 8,000,000
characters, reported as xml_too_large; you will
only reach that one running the library yourself, where there is no
body ceiling above it.
A thousand-line invoice is nowhere near either. A base64-embedded attachment is what gets you there: base64 spends four characters per three bytes, so a PDF of about 750 kB fills the request body on its own. Send the invoice without the attachment.
A findings array is capped at
500 entries per
severity; past that the response gains a
findings_truncated object, and valid still
reflects the whole document. No realistic invoice reaches that. Key
creation is limited to five requests
per IP address per UTC day, answered with 429 and
too_many_requests; it is the only limit that applies
before you hold a key.
There is no separate sandbox key; use a free key for testing. Rotation, body-size handling and every error code are in the API reference.
Reference for developers: library or API, what the hosted API adds, and your key
Should you use the library or the API?
| Use the library when… | Use the API when… |
|---|---|
| Your application runs JavaScript or TypeScript | Your application uses another language |
| You want processing to stay entirely local | You want a managed endpoint |
| You prefer to control when the rule set changes | You want the deployed rule set without package upgrades |
| You do not need centralised usage | You need one shared service across several systems |
Both use the same engine. The MIT library is free at any volume and has zero runtime dependencies. Pinning a library version also pins its rules, which keeps CI stable but makes upgrades your responsibility. The hosted API uses the version we have deployed. Read about rule updates.
Why the hosted API
The hosted API adds three things:
-
The current rule set, named in every response.
Each metered response includes a
provenanceblock with the engine version, rule set and profile. To check the deployment,GET /v1/versionsis free and needs no authentication. - Tracked source updates. The tracked-artefact table lists each upstream source, its version, its release date and our latest check.
- No Java and no toolchain. Call the API over HTTPS from the tools you already use.
After you have a key
Then send your first invoice: how authentication works, and the full API reference.
If your key is exposed or lost
While you still hold the key you can replace it yourself with POST /v1/keys/rotate. You authenticate the call with the key you are replacing, your plan and usage carry over, and the old key stops working at once. That key is the entire credential, so anyone else who has a copy can rotate it away from you on the same terms.
If you think it has been exposed, rotate first and investigate afterwards. If it is lost, what we can do depends on what we can prove: the three cases are set out here.
Prices are in US dollars, billed in advance through Paddle, our merchant of record, monthly or annually as you chose. Paddle adds any sales tax or VAT due where you are. On an annual plan the allowance is still the monthly one, reset on the 1st as usual: you pay for the year, and the documents are counted month by month.
Thirty days' notice before any price increase. See the terms, refund policy, privacy and DPA.