API for Controlled Invoice Compliance

Validate, auto-fix, revalidate via KoSIT, and generate audit evidence. One composite endpoint or three granular calls — full pipeline control.

1,300+ rules in the core validation engine. Every fixed invoice is revalidated via KoSIT Schematron before release.

POST /v2/validate-and-fix

RequestJSON
{
  "xml": "<Invoice xmlns='urn:oasis:names:...'> ... </Invoice>",
  "fileName": "INV-2026-0847.xml",
  "remediation_policy": "safe",
  "generate_evidence_pack": true
}
ResponseJSON
{
  "validationRef": "VAL-1740744832000-ABC12DEF",
  "originalValid": false,
  "fixedValid": true,
  "engine": "hybrid",
  "fixesApplied": 2,
  "remainingIssues": [],
  "fixSummary": {
    "totalIssues": 3,
    "autoFixable": 2,
    "needsInput": 1,
    "blocked": 0,
    "unknown": 0,
    "canAutoFixAll": false
  },
  "evidencePackUrl": "/api/v1/evidence-pack/EP-REF-...",
  "_links": {
    "self": "/api/v2/validate-and-fix",
    "fixWithInput": "/api/v1/fixer/fix-with-input?flow_id=..."
  }
}

Every field is explicit. No hidden transformations. No silent rewrites.

Where It Fits

Your ERP
Export (UBL/CII)

Invoice Navigator API

ValidateAuto-FixRevalidateEvidence
Peppol / Platform / Archive

Invoice Navigator sits between your export and your delivery channel. One composite endpoint handles the full pipeline — or use three granular endpoints for step-by-step control.

Your pipeline logic stays yours.

Not Another Validation API

Controlled Auto-Fix

Structural corrections where commercial meaning is unchanged. Whitespace, namespaces, code lists — fixed automatically.

Input-Required Workflow

Missing business data triggers explicit input request in the response. Nothing is assumed or injected.

Financial Field Blocking

Amounts, VAT totals, IBANs, and payment details are never modified. Enforced at engine level.

KoSIT Revalidation Loop

Every fixed invoice is revalidated before the response is returned. No separate call needed.

Every processed invoice generates a structured evidence pack — validation findings, fix diffs, blocked field confirmation, and revalidation proof.

Integrate in 3 Steps

1

Create your API key

Sign up, get a key, access the sandbox immediately.

2

Send your first invoice

POST to /v2/validate-and-fix with any UBL or CII invoice.

3

Deploy in your pipeline

Wire the endpoint between your ERP export and delivery. Done.

Typical integration time: less than one sprint.

Test the Engine

Run a real validation and auto-fix cycle. No signup required.

Compliance Engine
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>743617</cbc:ID>
  <cbc:IssueDate>2007-02-08</cbc:IssueDate>
  <cbc:DueDate>2007-04-08</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode >SEK</cbc:DocumentCurrencyCode>
  <cbc:AccountingCost>BeSt/TJ/Office</cbc:AccountingCost>
  <cbc:BuyerReference>Admin</cbc:BuyerReference>
  <cac:ContractDocumentReference>
    <cbc:ID>7231262</cbc:ID>
  </cac:ContractDocumentReference>
  <cac:AdditionalDocumentReference>
    <cbc:ID schemeID="SE">Model30/S.nr35141</cbc:ID>
    <cbc:DocumentTypeCode>130</cbc:DocumentTypeCode>
  </cac:AdditionalDocumentReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0088">7399887766677</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Solvägen 1</cbc:StreetName>
        <cbc:CityName>Sollentuna</cbc:CityName>
        <cbc:PostalZone>19127</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>SE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>SE556677889901</cbc:CompanyID>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>Godkänd för F-skatt</cbc:CompanyID>
        <cac:TaxScheme><cbc:ID>TAX</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Kopiering &amp; Test AB</cbc:RegistrationName>
        <cbc:CompanyID schemeID="0007">5566778899</cbc:CompanyID>
        <cbc:CompanyLegalForm>Säte: Sollentuna</cbc:CompanyLegalForm>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Driftservice</cbc:Name>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0007">5432154321</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Skellefteå Sambruk AB</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:AdditionalStreetName>Box 1</cbc:AdditionalStreetName>
        <cbc:CityName>Skellefteå</cbc:CityName>
        <cbc:PostalZone>93100</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>SE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Skellefteå Sambruk AB</cbc:RegistrationName>
        <cbc:CompanyID schemeID="0007">5432154321</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>B-E Ställman</cbc:Name>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:Delivery>
    <cac:DeliveryLocation>
      <cac:Address>
        <cbc:StreetName>Skålvägen 1 B</cbc:StreetName>
        <cbc:CityName>Skellefteå</cbc:CityName>
        <cac:Country>
          <cbc:IdentificationCode>SE</cbc:IdentificationCode>
        </cac:Country>
      </cac:Address>
    </cac:DeliveryLocation>
  </cac:Delivery>
  <cac:PaymentTerms>
    <cbc:Note>Enligt avtal</cbc:Note>
  </cac:PaymentTerms>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="SEK">1253.11</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="SEK">5012.42</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="SEK">1253.11</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>25</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="SEK">5012.42</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="SEK">5012.42</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="SEK">6265.53</cbc:TaxInclusiveAmount>
    <cbc:PayableRoundingAmount currencyID="SEK">0.47</cbc:PayableRoundingAmount>
    <cbc:PayableAmount currencyID="SEK">6266</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:Note>Januari 2008</cbc:Note>
    <cbc:InvoicedQuantity unitCode="MON">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="SEK">2770</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Name>Fast månadsavgift</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>25</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="SEK">2770</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:Note>Avläsning 27 dec, uppskattat månaden ut.</cbc:Note>
    <cbc:InvoicedQuantity unitCode="EA">1488</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="SEK">2242.42</cbc:LineExtensionAmount>
    <cac:InvoicePeriod>
      <cbc:StartDate>2006-12-01</cbc:StartDate>
      <cbc:EndDate>2006-12-31</cbc:EndDate>
    </cac:InvoicePeriod>
    <cac:Item>
      <cbc:Name>Rörlig avgift</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>25</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="SEK">1.507</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>

Click “Validate & Remediate” to run the engine

No signup required

Ready

Best experienced on desktop for the full interactive console.

Code Examples

JavaScript (fetch)
const response = await fetch('https://api.invoicenavigator.eu/api/v1/validate', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk_live_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    xml: invoiceXml,
    fileName: 'invoice-001.xml'
  })
});

const { data } = await response.json();
console.log(data.isValid, data.errors.length);
View full API reference →
Python (requests)
import requests

response = requests.post(
    "https://api.invoicenavigator.eu/api/v1/validate",
    headers={
        "Authorization": "Bearer sk_live_...",
        "Content-Type": "application/json"
    },
    json={"xml": invoice_xml, "fileName": "invoice-001.xml"}
)

data = response.json()["data"]
print(data["isValid"], len(data["errors"]))
View full API reference →
cURL
curl -X POST https://api.invoicenavigator.eu/api/v1/validate \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d @- <<< "$(jq -n --rawfile xml invoice.xml '{xml: $xml}')"'
View full API reference →

Or use the TypeScript SDK: npm install @invoicenavigator/sdk

SDKs & Open Source

TypeScript SDK

npm install @invoicenavigator/sdk

Type-safe client for the Invoice Navigator API. Validate, auto-fix, and retrieve evidence packs.

Open-Source Validator

npm install @invoicenavigator/einvoice-validator

Free EU e-invoice validator. Detect formats and validate against EN 16931 core rules. No API key needed.

GitHub Action

invoicenavigator/validate-invoice@v1

Validate e-invoices in your CI/CD pipeline. Catches compliance errors before deployment.

API Endpoints

Validation & Auto-Fix

MethodEndpoint
POST/v1/validate
POST/v2/validate-and-fix
POST/v1/validate/batch
POST/v1/fixer/fix
POST/v1/fixer/fix-with-input
POST/v1/fixer/categorize

Evidence Packs

MethodEndpoint
POST/v1/evidence-pack
GET/v1/evidence-pack/{id}
GET/v1/evidence-pack/{id}/download
GET/v1/verify/{id}

Compliance Data

MethodEndpoint
GET/v1/rules/{country}
GET/v1/countries
GET/v1/deadlines
GET/v1/errors
GET/v1/errors/{ruleId}

Pricing

Free

0/mo

Up to 500 invoices/mo

Try the full engine — 500 invoices/month

Pro

99/mo

Up to 10,000 invoices/mo

For production API pipelines

Overage: €10 per additional 1,000 invoices. No service interruption.

Start with 500 free invoices/month. Full engine access. No credit card required.

API Integration FAQ