Docs

Try it

See a dry run on a sample invoice.

  • In the sandbox

In plain words

Try it shows a dry run on a sample invoice without any setup: pick a sample and read the answer, which names the field and says who fixes it. All the invoices are invented.

A dry run shows what makes eurinvoice different: when an invoice is wrong, the answer names the field, gives a catalogue code and says who fixes it. Pick an invoice and read the answer.

Sample data only. Do not type a real invoice, a real company or a key for a live system. Nothing you type is stored on a server, and nothing leaves this page in sample mode.

Recorded answers, 7 Oct 2026. Each was recorded from the service and is replayed here. The XML was built by the service's own code. No server is called.

A German software firm bills a brewery. The KoSIT validator checks the file.

Fixed in sample mode.

Go to the answer

The invoice

This is what was sent.

Invoice type
Seller
Buyer
Invoice details
Lines

Line 1

Line 2

Line 3

Worked out by this page for display. The service works out its own totals.

Subtotal
6,609.00 EUR
VAT (19 %)
1,255.71 EUR
Total due
7,864.71 EUR

The answer

ValidDE-XRECHNUNG, recorded 7 Oct 2026

  1. schemapassed
  2. mappingpassed
  3. pre-checkpassed
  4. kositpassed

No findings.

Built file

  • xrechnung-ubl SHA-256 cc1a764a50fb6439f558a2459bcd4a5a58d8960bdc28c6dd1bab00790e67a630

The service reported this hash for the file it built. The XML below hashes to the same value (5,305 bytes). It is shown with line breaks; the download is the file as built.

The built XML
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>
  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>RE-2026-0143</cbc:ID>
  <cbc:IssueDate>2026-09-26</cbc:IssueDate>
  <cbc:DueDate>2026-10-10</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:Note>Vielen Dank für Ihren Auftrag.</cbc:Note>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>PO-88731</cbc:BuyerReference>
  <cac:InvoicePeriod>
    <cbc:StartDate>2026-09-01</cbc:StartDate>
    <cbc:EndDate>2026-09-30</cbc:EndDate>
  </cac:InvoicePeriod>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9930">DE938296582</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Hafenstraße 12</cbc:StreetName>
        <cbc:CityName>Hamburg</cbc:CityName>
        <cbc:PostalZone>20457</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>DE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE938296582</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Nordlicht Software GmbH</cbc:RegistrationName>
        <cbc:CompanyID>HRB 123456</cbc:CompanyID>
        <cbc:CompanyLegalForm>GmbH</cbc:CompanyLegalForm>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Jana Petersen</cbc:Name>
        <cbc:Telephone>+49 40 1234567</cbc:Telephone>
        <cbc:ElectronicMail>[email protected]</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9930">DE965003781</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Marienplatz 4</cbc:StreetName>
        <cbc:CityName>München</cbc:CityName>
        <cbc:PostalZone>80331</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>DE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE965003781</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Brauhaus Weber AG</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>
    <cbc:PaymentID>RE-2026-0143</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>DE89370400440532013000</cbc:ID>
      <cbc:Name>Nordlicht Software GmbH</cbc:Name>
      <cac:FinancialInstitutionBranch>
        <cbc:ID>COBADEFFXXX</cbc:ID>
      </cac:FinancialInstitutionBranch>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>
  <cac:PaymentTerms>
    <cbc:Note>Zahlbar innerhalb von 14 Tagen ohne Abzug.</cbc:Note>
  </cac:PaymentTerms>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">1255.71</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">6609.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">1255.71</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">6609.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="EUR">6609.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="EUR">7864.71</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">7864.71</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="LS">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">5900.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Mapping Business Central → EN 16931, Validierung XRechnung, Test im Peppol-Testnetz</cbc:Description>
      <cbc:Name>E-Rechnung Einführung (Festpreis)</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">5900.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="MON">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">349.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Care Plus, September 2026</cbc:Description>
      <cbc:Name>Betreuung abgelehnter Rechnungen</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">349.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>3</cbc:ID>
    <cbc:InvoicedQuantity unitCode="HUR">3</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">360.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Remote, Buchhaltungsteam</cbc:Description>
      <cbc:Name>Zusätzliche Schulung</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">120.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>
Request

The JSON this page sends to POST /validate. The cURL uses a placeholder key.

{
  "invoice_ref": "RE-2026-0143",
  "route": "DE-XRECHNUNG",
  "environment": "sandbox",
  "document": {
    "lang": "de",
    "country": "DE",
    "invoice": {
      "number": "RE-2026-0143",
      "issue_date": "2026-09-26",
      "due_date": "2026-10-10",
      "type_code": 380,
      "currency": "EUR",
      "buyer_reference": "PO-88731",
      "period": {
        "start": "2026-09-01",
        "end": "2026-09-30"
      },
      "notes": [
        "Vielen Dank für Ihren Auftrag."
      ]
    },
    "seller": {
      "name": "Nordlicht Software GmbH",
      "address": {
        "street": "Hafenstraße 12",
        "city": "Hamburg",
        "postcode": "20457",
        "country": "DE"
      },
      "vat_id": "DE938296582",
      "tax_number": "27/123/45678",
      "company_id": "HRB 123456",
      "register": "Amtsgericht Hamburg HRB 123456",
      "managing_directors": "Geschäftsführer: Jana Petersen",
      "legal_info": "GmbH",
      "endpoint": {
        "id": "DE938296582",
        "scheme": "9930"
      },
      "contact": {
        "name": "Jana Petersen",
        "email": "[email protected]",
        "phone": "+49 40 1234567"
      },
      "brand_color": "#1160FF",
      "accent_color": "#FF9021"
    },
    "buyer": {
      "name": "Brauhaus Weber AG",
      "address": {
        "street": "Marienplatz 4",
        "city": "München",
        "postcode": "80331",
        "country": "DE"
      },
      "vat_id": "DE965003781",
      "endpoint": {
        "id": "DE965003781",
        "scheme": "9930"
      }
    },
    "lines": [
      {
        "name": "E-Rechnung Einführung (Festpreis)",
        "description": "Mapping Business Central → EN 16931, Validierung XRechnung, Test im Peppol-Testnetz",
        "quantity": 1,
        "unit": "LS",
        "unit_price": 5900,
        "vat_category": "S",
        "vat_rate": 19
      },
      {
        "name": "Betreuung abgelehnter Rechnungen",
        "description": "Care Plus, September 2026",
        "quantity": 1,
        "unit": "MON",
        "unit_price": 349,
        "vat_category": "S",
        "vat_rate": 19
      },
      {
        "name": "Zusätzliche Schulung",
        "description": "Remote, Buchhaltungsteam",
        "quantity": 3,
        "unit": "HUR",
        "unit_price": 120,
        "vat_category": "S",
        "vat_rate": 19
      }
    ],
    "payment": {
      "means_code": 58,
      "iban": "DE89 3704 0044 0532 0130 00",
      "bic": "COBADEFFXXX",
      "reference": "RE-2026-0143",
      "terms": "Zahlbar innerhalb von 14 Tagen ohne Abzug."
    },
    "profile": "xrechnung"
  }
}
curl -X POST "https://localhost:8443/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @invoice.json
Response
{
  "valid": true,
  "route": "DE-XRECHNUNG",
  "documents": [
    {
      "sha256": "cc1a764a50fb6439f558a2459bcd4a5a58d8960bdc28c6dd1bab00790e67a630",
      "kind": "xrechnung-ubl"
    }
  ],
  "layers": [
    {
      "findings": [],
      "passed": true,
      "layer": "schema"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "mapping"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "pre-check"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "kosit"
    }
  ]
}

What you see

Each of the six invoices is an invented sample, run once through POST /validate, with its answer saved. The page replays that answer: it calls no server and stores nothing. The XML on a valid answer was built by the service's own code, and its hash equals the one the service reported.

What it does not do

  • It stores nothing, and it has no accounts. A dry run queues and sends nothing.
  • It works for business-to-business invoices only.
  • It supplies no legal wording. For reverse charge and exempt invoices, enter the basis yourself.
  • It does not run a dry run on an invoice you change. To do that, ask for a sandbox key and call POST /validate.