Validate an Invoice in 60 Seconds
No signup required. Get a test key and validate a real invoice right now.
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.
Get your API key
Sign up for a free account to get your API key instantly. No credit card required.
Get Free API KeyAlready have an account? View your API keys
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"}')"'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.
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
Validation API
Full request/response schema and parameters
Authentication
API keys, rate limits, and error handling
API Reference
All endpoints, formats, and capabilities
Error Library
1,300+ validation rules explained with fixes
Need help?
Check out our developer documentation or contact our team for support.