Skip to content

What's New

Product updates, changelogs, and announcements.

Announcement

Introducing the getpeppr News Feed

Stay up to date with the latest getpeppr features, improvements, and announcements.

launchgetpeppr
Changelog

SDK 5.0.0 and CLI 0.10.0 — two currency codes the network stopped accepting

@getpeppr/sdk 5.0.0 follows Peppol BIS Billing 3.0.21: BGN and HRK are gone, XCG is in. It also ships the structured API result contract and header-driven retryability, merged over the past week and unpublished until now.

sdkclipeppol
Changelog

Sweden is now self-serve, and two Swedish rules are checked before you send

Swedish senders no longer wait for a human to read their first invoice. Two national rules are now checked before the document leaves: a missing organisationsnummer returns 422 SE-R-003, and a standard VAT rate outside 6/12/25 % returns 422 SE-R-006. Both used to be accepted by us and rejected by the network afterwards.

apicountries
Changelog

A blank Idempotency-Key is now refused instead of ignored

On the six endpoints that read the header, a request that reaches the idempotency check with an empty or whitespace-only Idempotency-Key now returns 400 idempotency_key_blank. It used to be silently ignored, so retries were executed as new requests.

apibugfix
Changelog

SDK 4.8.0 — first-send tax fields now follow the sender

GET /identity now returns an O/0 or AE/0 integration profile derived from the sender's exact provider inventory. Unverifiable roles and unreadable inventories block instead of guessing.

sdksandboxfix
Changelog

CLI 0.9.0 — sandbox send checks the exact sender profile

getpeppr send now reads GET /identity before every sandbox submission, adapts generated fixtures to O/0 or AE/0, and refuses conflicting user files locally.

clisandboxfix
Changelog

SDK 4.7.0 — unsupported schemes stop looking pending

A platform customer whose Peppol scheme has no active validator now settles as unsupported_scheme instead of pending. SDK 4.7.0 adds the status and a matching legal_entity.unsupported_scheme webhook, so your UI can stop promising progress that is not happening.

sdkplatformfix
Changelog

CLI 0.8.4 — the first sandbox invoice now sends

CLI 0.8.4 moved generated fixtures to O/0 for routing-only senders. CLI 0.9.0 supersedes that static assumption by reading the sender's exact provider profile before every sandbox send.

clisandboxfix
Changelog

SDK 4.5.0 — import a customer's own UBL, and send it under their identity

importFile() takes a sender, so a platform can send a customer's raw UBL under that customer's Peppol identity. Until now the gateway only ever compared the document against your own company — and the SDK dropped the field without a word. If you build a platform on getpeppr and send raw UBL, upgrade.

sdkplatformfix
Changelog

CLI 0.8.2 — getpeppr lookup now accepts both spellings of a scheme

getpeppr lookup GB:VAT:123456789 was split by position, producing scheme GB and value VAT:123456789 — both wrong, and silently. The gateway and the SDK were fixed in 4.4.0; the CLI carried its own copy of that logic and kept the old behaviour until now. Also rebundles SDK 4.5.0.

clipeppolfix
Changelog

SDK 4.4.0 — a Peppol scheme has two spellings, and the XML only accepts one

buildInvoiceXml turned GB:VAT:123456789 into schemeID="GB" — a scheme the network does not know. Both spellings of a scheme are now accepted everywhere and always resolved to the numeric EAS code. Sellers in the UK, Ireland and Germany were also hit by a second, unrelated rule: upgrade if you build UBL with the SDK.

sdkpeppolfix
Changelog

Imported invoices now carry the amounts stated in your document

POST /v1/invoices/import never read the amounts your document states, leaving total and amount due null for the life of the invoice. Both are now extracted.

apibugfix
Changelog

The import route now refuses the same document sent twice

The same UBL sent under two different Idempotency-Keys now returns 409 duplicate_document on POST /v1/invoices/import, as it already did on the JSON route.

apipeppolbugfix
Changelog

SDK 4.3.0 + CLI 0.8.1 — read your own Peppol identity from the API

New GET /v1/identity endpoint, peppol.identity.get() in the SDK and a getpeppr whoami command: any API key — standard keys included — can now read its own account's Peppol identity and registration status. Until today there was no API way to answer "is my identifier registered?".

sdkcliapifeature
Changelog

SDK 4.1.1 — we promised byte-for-byte transmission, and that was wrong

@getpeppr/sdk 4.1.1 corrects a promise the SDK made in your editor: raw import does not preserve your document byte for byte. Your content does travel as written; the serialisation does not. If you seal documents, hash a canonical form.

sdkpeppolcorrection
Changelog

SDK 4.1.0 — four rule identifiers were pointing at the wrong rule

@getpeppr/sdk 4.1.0 corrects four VAT rule identifiers that named real rules — just not the ones being checked — and validateSchematron() now reports what it covered.

sdkpeppolbugfix
Changelog

Silence now reaches you from us: invoice.delivery_unconfirmed

A new invoice.delivery_unconfirmed webhook fires 30 minutes after a send with no delivery evidence, and a document still silent after 7 days is now reported as undeliverable instead of staying open forever.

webhookssdk
Changelog

CLI 0.7.1 — the corrected rule identifiers finally reach getpeppr validate

@getpeppr/cli 0.7.1 rebundles SDK 4.1.1. Four VAT rule identifiers that named real rules — just not the ones being checked — were fixed in the SDK this morning; CLI users only receive them now, because the CLI bundles the SDK rather than importing it at runtime.

clipeppolbugfix
Changelog

SDK 4.0.0 and CLI 0.7.0 — the status you read was measured, not invented

@getpeppr/sdk 4.0.0 stops inventing invoice statuses and the detail endpoint now returns the real one — waitFor() no longer expires on delivered invoices.

sdkapibugfix
Changelog

SDK 3.2.0 and CLI 0.6.0 — VAT categories L and M are refused before you send

@getpeppr/sdk 3.2.0 and @getpeppr/cli 0.6.0 flag the VAT categories EN 16931 allows but getpeppr cannot route — before the send, not at the 422.

sdkpeppol
Changelog

SDK 3.1.0 — registryStatus is now typed on legal entity verification

@getpeppr/sdk 3.1.0 types verificationDetail.registryStatus, the field that tells you a business registry knows a company and does not consider it active.

sdkconsole
Changelog

SDK 3.0.0 — GB:CRN removed, UK and German identifier rules rebuilt

@getpeppr/sdk 3.0.0 removes GB:CRN — it is not a Peppol scheme — and rebuilds the UK VAT and German Leitweg-ID format rules against real network data.

sdkpeppolbugfix
Changelog

SDK 2.6.0 — validate results now type the country-rule findings

@getpeppr/sdk 2.6.0 adds the countryRules field to the server validation result type, so TypeScript users can read the Dutch (and future) national-rule findings without a cast.

sdkvalidation
Changelog

Dutch invoice rules are now enforced before you send

The gateway now auto-includes your KVK/OIN on Dutch invoices and rejects anything else the Dutch Peppol rules would kill — instantly, with the official rule code, instead of a silent failure after acceptance.

consoleapinetherlands
Changelog

Fix directory search pagination and lock webhook event types (SDK 2.5.0)

SDK 2.5.0 fixes directory.search() pagination metadata (totalCount/hasMore were undefined) and trims WebhookEventType to exactly what the gateway accepts.

sdkwebhooksbugfix
Changelog

Scaffold invoices that send on the first try in sandbox (CLI 0.5.3)

getpeppr init now targets the sandbox test receiver. CLI 0.8.4 later completed the fresh-account send contract by changing the generated tax lines to O/0.

cliconsole
Announcement

Subscribe to the EU e-Invoicing Mandate Tracker

A monthly digest of EU e-invoicing mandates — deadlines, country rollouts and what they mean for your integration. First edition, the Belgium 2026 playbook, is out now.

compliancemandateslaunch
Changelog

Validate French identifiers offline — SIREN, SIRET and VAT keys (SDK 2.4.0)

SDK 2.4.0 validates French buyer identifiers before you send: SIREN/SIRET checksums (including the real La Poste rule) and the DGFiP VAT-key formula that catches typos offline.

sdkfrancepeppol
Changelog

Fix group VAT rounding (EN 16931 BR-CO-17) and expose the UBL payable amount

SDK 2.3.0 rounds VAT once per tax group as EN 16931 requires, amountDue now always equals the UBL PayableAmount, and the new computeUblPayableAmount() derives the legal amount due without re-implementing the formula.

sdkapibugfix
Changelog

Send French payment notifications with markAs() and read the new France guide

Marking a French-flow invoice as paid now emits the reform's payment_received_notification, and the new France guide covers identifiers, directory registration and statuses end to end.

franceapipeppol
Changelog

Structured status detail, smarter waitFor(), and four new webhook events

GET /v1/invoices and the SDK now expose per-axis structured status detail (with native jurisdiction codes), waitFor() resolves instead of timing out when an invoice gets paid, and four webhook events land — including the opt-in invoice.status_changed with stable event ids.

webhookssdkapi
Changelog

Delivery is now Peppol-only — contact emails are no longer a silent fallback

A recipient's contact email is no longer used as a delivery fallback. Documents travel through the Peppol network only, and an unreachable recipient now fails explicitly instead of reporting a misleading "delivered".

peppolapiconsole
Changelog

New webhook event: invoice.undeliverable — know when a recipient can't be reached

A new invoice.undeliverable webhook event fires when a recipient cannot be found on the Peppol network, and the SDK's waitFor() and the CLI --watch now treat no_action as a terminal failure instead of waiting for a timeout.

webhookssdkcli
Newsletter

Belgium 2026: the developer's playbook

The grace period is over. What Belgium's B2B e-invoicing mandate actually requires from your stack — and a TypeScript path to compliance.

peppolbelgiumcompliance
Changelog

French identifiers are now verified against INSEE Sirene

French SIREN and SIRET numbers are now verified automatically, backed by INSEE Sirene, France's official business registry.

peppolconsoleapi
Announcement

Free Peppol participant lookup — check any company on the network

Check whether any company is registered on the Peppol network — by VAT, company number, or name. Free, instant, no account, and available as a public JSON API.

peppoldirectorytools
Changelog

SDK 2.0.0 — Working events feed + environment-scoped event log

@getpeppr/sdk v2.0.0 fixes events.list() to return the real event shape, scopes the /v1/events feed to your API key's environment, and adds the peppol_identifier.* webhook types. Includes a breaking type change to EventEntry.

sdkeventswebhooksapi
Changelog

SDK 1.8.0 — Typed sandbox registration failure webhooks

@getpeppr/sdk now types the legal_entity.registration_failed webhook fired when a sandbox Legal Entity verifies but cannot be registered on the Peppol network.

sdkwebhooksplatformpeppol
Changelog

SDK 1.7.0 — Typed inbound webhook events

@getpeppr/sdk now types the inbound.* webhook events fired when you receive documents over the Peppol network.

sdkwebhookspeppol
Changelog

SDK 1.6.0 — Multi-tenant Legal Entities

@getpeppr/sdk now manages your customers as Peppol Legal Entities and sends invoices on their behalf — fully typed.

sdkplatformpeppolmulti-tenant
Changelog

Swedish identifiers are now verified against Bolagsverket

Swedish 0007 organisation numbers are now verified in real time against Bolagsverket, Sweden's official business registry.

peppolconsoleapi
Changelog

SDK 1.5.2 — Belgian Peppol Directory fixes

Improved Belgian 0208 identifier handling and fixed the SDK directory lookup response shape.

sdkclipeppol
Announcement

n8n workflow templates for Peppol invoice automation

Import ready-made n8n workflows for validating invoices, checking Peppol recipients, and sending invoices through getpeppr.

integrationsn8npeppol
Changelog

Activity log — see who did what in your organization

New Activity page in the dashboard — a tamper-proof audit trail that tracks API key creation, webhook changes, contact management, and more.

consolefeature
Changelog

CLI 0.2.0 — init, convert, and lookup commands

Three new commands for the getpeppr CLI: scaffold invoices, convert to UBL XML, and search the Peppol Directory — all without an account.

sdkfeature
Changelog

Add content-as-code news system

New changelog page in the console and news section on the website, powered by Markdown files.

consolewebsite
Changelog

Introducing @getpeppr/cli — the first Peppol CLI validator

Validate Peppol e-invoices from your terminal with @getpeppr/cli, now available on npm.

sdklaunch
Changelog

SDK v1.1.2 — phone numbers and directory fields

New contact fields for phone numbers and Peppol Directory metadata in @getpeppr/sdk.

sdk
Changelog

Add webhook delivery system with automatic retries

Configure webhook endpoints to receive real-time notifications for invoice events with automatic retry on failure.

apiwebhooks