API for Controlled Invoice Compliance

Validate, safely remediate, 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 remediated 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

ValidateRemediateRevalidateEvidence
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-Remediation

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 remediated invoice is revalidated before the response is returned. No separate call needed.

Every processed invoice generates a structured evidence pack — validation findings, remediation 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 remediation 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 →

TypeScript and Python SDKs are in development. Contact us for early access.

API Endpoints

Validation & Remediation

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

Starter

249/mo

Up to 1,000 invoices/mo

1,000 invoices/mo · 30-day retention · Email support

Pro

499/mo

Up to 5,000 invoices/mo

5,000 invoices/mo · Batch processing · 90-day retention · Rule alerts

Scale

999/mo

Up to 25,000 invoices/mo

25,000 invoices/mo · 1-year retention · Dedicated support · SLA targets

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

Start with 100 free invoices. Full engine access. No credit card required.