Back to API Docs

Quickstart Guide

Validate your first e-invoice in 60 seconds

Interactive Quickstart

Validate an Invoice in 60 Seconds

No signup required. Get a test key and validate a real invoice right now.

1
2
3

Step 1: Get a Test Key

Click the button below to instantly generate a test API key. No signup required.

Test keys are limited to 10 requests and expire in 1 hour.

Developer Tools

Integrate Invoice Navigator into your workflow with our ready-to-use tools.

Detailed Integration Guide
1

Get your API key

Sign up for a free account to get your API key instantly. No credit card required.

Get Free API Key

Already have an account? View your API keys

2

Validate your first invoice

Send an invoice XML to the validation endpoint and get instant results.

JSJavaScript

// Read your invoice XML
const invoiceXml = readFileSync('invoice.xml', 'utf-8')

// Validate & fix via REST API
const response = await fetch(
  'https://api.invoicenavigator.eu/api/v2/validate-and-fix',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.INVOICE_NAV_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      xml: invoiceXml,
      fileName: 'invoice.xml',
      remediation_policy: 'safe'
    })
  }
);

const { data } = await response.json();

if (data.originalValid) {
  console.log('Invoice is already valid!');
  console.log('Ref:', data.validationRef);
} else if (data.fixedValid) {
  console.log('Invoice remediated successfully');
  console.log('Fixes applied:', data.fixesApplied);
  console.log('Engine:', data.engine);
} else {
  console.log('Remaining issues:');
  data.remainingIssues.forEach(issue => {
    console.log(`  [${issue.code}] ${issue.title}`);
  });
}

PYPython

import requests
import os

# Read your invoice XML
with open("invoice.xml", "r") as f:
    invoice_xml = f.read()

# Validate & fix via REST API
response = requests.post(
    "https://api.invoicenavigator.eu/api/v2/validate-and-fix",
    headers={
        "Authorization": f"Bearer {os.environ['INVOICE_NAV_API_KEY']}",
        "Content-Type": "application/json"
    },
    json={"xml": invoice_xml, "fileName": "invoice.xml", "remediation_policy": "safe"}
)

data = response.json()["data"]

if data["originalValid"]:
    print("Invoice is already valid!")
    print(f"Ref: {data['validationRef']}")
elif data["fixedValid"]:
    print("Invoice remediated successfully")
    print(f"Fixes applied: {data['fixesApplied']}")
    print(f"Engine: {data['engine']}")
else:
    print("Remaining issues:")
    for issue in data["remainingIssues"]:
        print(f"  [{issue['code']}] {issue['title']}")

cURL (REST API)

curl -X POST https://api.invoicenavigator.eu/api/v2/validate-and-fix \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<< "$(jq -n --rawfile xml invoice.xml '{xml: $xml, remediation_policy: "safe"}')"'
3

Handle the response

The API returns a structured response with validation status, remediation results, and any remaining issues.

{
  "success": true,
  "data": {
    "validationRef": "VAL-1740744832000-8F2A3B",
    "originalValid": false,
    "fixedValid": true,
    "engine": "hybrid",
    "fixesApplied": 2,
    "fixSummary": {
      "totalIssues": 3,
      "autoFixable": 2,
      "needsInput": 1,
      "blocked": 0,
      "canAutoFixAll": false
    },
    "remainingIssues": [],
    "metadata": {
      "invoiceNumber": "INV-2026-001",
      "issueDate": "2026-01-10",
      "currency": "EUR",
      "totalAmount": "1250.00"
    },
    "evidencePackUrl": "/api/v1/evidence-pack?validationRef=VAL-1740744832000-8F2A3B",
    "_links": {
      "self": "/api/v2/validate-and-fix",
      "evidencePack": "/api/v1/evidence-pack?validationRef=VAL-1740744832000-8F2A3B"
    }
  },
  "_meta": {
    "validationRef": "VAL-1740744832000-8F2A3B",
    "processingTimeMs": 187
  }
}

See the Validation API reference for the complete response schema.

4

Generate an Evidence Pack (optional)

Add generate_evidence_pack: true to your request to receive a cryptographically signed evidence pack inline with the validation response.

// Add to your v2/validate-and-fix request body:
const response = await fetch(
  'https://api.invoicenavigator.eu/api/v2/validate-and-fix',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.INVOICE_NAV_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      xml: invoiceXml,
      remediation_policy: 'safe',
      generate_evidence_pack: true  // ← returns signed pack inline
    })
  }
);

const { data } = await response.json();

if (data.evidencePack) {
  console.log('Reference:', data.evidencePack.referenceCode);
  console.log('Document hash:', data.evidencePack.documentHash);
  console.log('Signature:', data.evidencePack.signature);
}

Evidence Packs are available on all plans, including the free trial. See the API reference for the full evidence pack schema.

You're all set!

You've successfully validated your first invoice. Explore more API endpoints or check out the full documentation.

Need granular control? The v1 endpoints let you validate, categorize, remediate, and generate evidence packs as separate steps. See the API Reference for the full v1 surface.

Next Steps

Need help?

Check out our developer documentation or contact our team for support.