Changelog

What shipped.

Format support, endpoints and platform changes — newest first. Dates are ship dates, not announcement dates.

Pricing corrected: same prices, five times the documents

  • New entry tier: Solo, €19/month for 500 documents — the first paid step is now a decision one developer can make rather than a purchase order.
  • The free plan goes from 25 to 50 documents a month, so a first integration sprint finishes without a card.
  • Starter stays at €49 and now includes 2,500 documents a month instead of 500. Growth stays at €149 and now includes 12,000 instead of 2,000. No price of an existing plan was raised, and no subscription is re-rated.
  • Platform now starts at €690/month billed annually (was €990) and covers 75,000 documents a month.
  • The Scale tier (€399 / 10,000 documents) is retired: Growth covers that volume at €149. Anyone already on Scale keeps it, unchanged, for as long as the subscription runs — an id that has ever been sold is never re-priced here.
  • Overage rates fall in step with the quotas: €0.06 on Solo, €0.04 on Starter, €0.02 on Growth, €0.012 on Platform — still capped at 2× the plan fee, still only billed while metered billing is active on the subscription.
  • The design-partner offer is now 12 months of Growth, and the public slot counter stays hidden until a partner has actually signed. It was reporting a vacancy, not a scarcity.

Quotas follow your billing period, MCP server & machine-readable docs

  • Your document quota and the overage cap now run with your Stripe billing period instead of the calendar month. On annual plans the year's documents pool instead of expiring monthly (Starter annual: 6,000 a year, same total), and the “capped at 2× the plan fee” promise now holds on every single invoice — previously a mid-month or annual subscription could span several cap windows.
  • The per-document overage rate is now shown on each self-serve paid tier on /pricing (Starter, Growth, Scale), together with the condition attached to it: overage is billed only while metered billing is active on your subscription — otherwise calls stop at the quota with a 429 rather than being billed.
  • Validation scope is now stated per format wherever we make the claim — pricing, the free validator, the SDK READMEs, /llms.txt and the AGB: XRechnung (UBL and CII) is checked by the official KoSIT validator; ZUGFeRD / Factur-X and Peppol BIS are checked against structural EN 16931 rules. Every report's `tier` field already said which one ran.
  • CII fixes: the settlement block emitted CreditorReferenceID after PaymentReference (invalid against UN/CEFACT D16B), and the VAT breakdown omitted the rate for category O. Both are corrected — this affected SEPA direct-debit and not-subject-to-VAT invoices in CII syntax.
  • A fully prepaid invoice (BT-113 covering the total) no longer requires a due date — BR-CO-25 is conditioned on the amount due, not the gross total. Unblocks Schlussrechnung after a full Abschlag.
  • The validator response is now positively identified before any pass verdict is honoured, so a misconfigured or unreachable validator returns 503 instead of ever reporting a document as valid.
  • New ceilings, documented at /docs/errors/payload-too-large: 1,000 invoice lines and 1 MiB of XML per request. New free-but-bounded fair-use allowance for failed generate attempts — failed calls remain free and unbilled.
  • MCP server (@normbill/mcp): generate, validate and parse invoices from Claude, Cursor and other MCP clients — plus explain_rule, a no-key lookup for any KoSIT rule id.
  • Machine-readable docs: /llms.txt (curated map) and /llms-full.txt (the whole rule and error reference as one markdown file); every rule page now has a markdown twin at /docs/rules/<rule-id>.md.
  • Guides hub at /guides and /de/guides with two new guides — reading KoSIT validator errors, and build vs buy for SaaS teams — bilingual, with visible updated dates.
  • AI answer engines are explicitly welcome: dedicated robots.txt group for GPTBot, ClaudeBot, PerplexityBot, Bingbot & co., richer structured data (TechArticle, breadcrumbs, organization profiles) and honest sitemap dates.

Credit notes done right & the founding offer on the landing

  • Corrections (type 384, negative quantities) validate cleanly end-to-end — tier 1 no longer rejects them with a spurious totals error.
  • Type code 381 is now rejected before generation for UBL formats with the exact rule and fix (BR-CL-01) instead of failing at the validator; CII formats keep 381.
  • Tier 1 catches a missing IBAN for credit transfers (means code 30, including the terms-only default) — playground and API now agree with KoSIT (BR-DE-23-a).
  • Landing: design-partner founding offer featured (12 months Scale free for the first 10 product teams), linked trust guarantees, and a German offer page at /de/design-partners.
  • 30-day validation guarantee (AGB § 6a): a generated invoice fails the official KoSIT validator — we fix it free or refund the month.
  • Free readiness check on the validator pages: send your current invoice XML, get the three findings most likely to break before 2027 — triaged by a human, within one working day.

XRechnung CII via KoSIT, free validator, SDKs

  • xrechnung-cii-3.0: XRechnung in CII syntax with authoritative KoSIT validation (same CIUS as UBL).
  • Free public validator at /de/validator and /validator — drop XML, get reverse-mapped fixes.
  • Engine coverage for prepaid amounts, SEPA direct debit, invoicing periods, attachments, item ids and gross price/discount.
  • TypeScript SDK on npm (@normbill/xrechnung) and PHP client on Packagist (normbill/xrechnung).

New pricing: pay only for produced documents

  • Five tiers: Free (25 documents/month), Starter €49, Growth €149, Scale €399 and a sales-led Platform tier from €990/month billed annually.
  • The value metric is now explicit: only successful generate and parse calls count. Validation, retries and failed calls are free (5× fair-use on validation).
  • Existing customers are grandfathered on their current plan and price — forever. Nothing changes unless you choose to switch.
  • X-Quota-Warning response header from 80% usage, and a bill-shock cap on metered overage (2× the base fee).
  • Idempotency-Key header support on generate: safe retries that never double-consume quota.

Annual billing, interactive reference & site relaunch

  • Annual billing with two months free on Startup and Scale.
  • Interactive API reference at /reference and the OpenAPI spec at /openapi.json, served straight from the runtime contracts.
  • Full site redesign: new landing, documentation with endpoint reference, standalone playground.
  • CII (ZUGFeRD / Factur-X) documents accepted by /v1/invoices/parse.

ZUGFeRD / Factur-X hybrid PDF & Peppol BIS 3.0

  • generate now produces ZUGFeRD 2.x / Factur-X 1.0 hybrid PDF/A-3 (CII embedded) on paid plans.
  • peppol-bis-3.0 format: BIS Billing 3.0 UBL from the same invoice JSON.
  • CII (UN/CEFACT D16B) serializer. XRechnung CII later gained full KoSIT validation (see 2026-07-18); ZUGFeRD / Factur-X remain structural-tier today.
  • German-language documentation for every curated validation rule.
  • /v1/invoices/parse: inbound XML → typed invoice JSON, on all plans.

Engine & platform hardening

  • Document and line allowances/charges (BG-20/21/27/28).
  • VAT exemption reasons — categories E, AE, K, G and O now serialize correctly (BT-120/121).
  • Password reset and verification-email resend flows.
  • RFC 9457 problem details on every error path; stricter security headers.
  • GDPR account deletion, self-serve from the dashboard.

Billing & launch build

  • Stripe subscriptions with metered overage on paid plans.
  • Email verification on signup.
  • Golden-corpus validation against the real KoSIT validator in CI.

Initial platform

  • XRechnung 3.0 (UBL 2.1) generation, validated against the official KoSIT validator before every response.
  • /v1/invoices/validate for documents generated anywhere else.
  • In-browser playground running the real engine, no account needed.
  • Instant API keys — test and live — with no sales call.

Spotted something?

Bug, missing feature, wrong validation result — tell us. The page you're on is attached automatically; email optional.