{
  "info": {
    "name": "Billhorse API",
    "description": "Validate and parse e-invoices (XRechnung, ZUGFeRD/Factur-X, EN 16931 UBL/CII).\n\nSet the `apiKey` collection variable to your API key (issued per tenant; sandbox keys are free — hello@billhorse.com). Requests send the invoice as raw bytes (XML or PDF), max 10 MB — no multipart, no base64.\n\nEvery finding carries a rule id (e.g. BR-DE-15) with a human explanation at https://billhorse.com/en/rules/<id>/. Errors come as RFC 9457 application/problem+json — see https://billhorse.com/docs/errors/.\n\nGenerated from https://billhorse.com/docs/openapi.yaml (Billhorse API 0.1.0-draft).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.billhorse.com/v1",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Validate an e-invoice (valid sample)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/xml"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/validate",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "validate"
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n         xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\n         xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>\n  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>\n  <cbc:ID>RE-2026-0815</cbc:ID>\n  <cbc:IssueDate>2026-06-15</cbc:IssueDate>\n  <cbc:DueDate>2026-07-15</cbc:DueDate>\n  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>\n  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>\n  <cbc:BuyerReference>04011000-12345-03</cbc:BuyerReference>\n  <cac:AccountingSupplierParty>\n    <cac:Party>\n      <cac:PartyName>\n        <cbc:Name>Muster Software GmbH</cbc:Name>\n      </cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Beispielstraße 1</cbc:StreetName>\n        <cbc:CityName>Berlin</cbc:CityName>\n        <cbc:PostalZone>10115</cbc:PostalZone>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyTaxScheme>\n        <cbc:CompanyID>DE123456789</cbc:CompanyID>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:PartyTaxScheme>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Muster Software GmbH</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:Contact>\n        <cbc:Name>Erika Muster</cbc:Name>\n        <cbc:Telephone>+49 30 1234567</cbc:Telephone>\n        <cbc:ElectronicMail>rechnung@muster-software.de</cbc:ElectronicMail>\n      </cac:Contact>\n    </cac:Party>\n  </cac:AccountingSupplierParty>\n  <cac:AccountingCustomerParty>\n    <cac:Party>\n      <cac:PartyName>\n        <cbc:Name>Beispiel AG</cbc:Name>\n      </cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Kundenweg 2</cbc:StreetName>\n        <cbc:CityName>Hamburg</cbc:CityName>\n        <cbc:PostalZone>20095</cbc:PostalZone>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Beispiel AG</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n    </cac:Party>\n  </cac:AccountingCustomerParty>\n  <cac:PaymentMeans>\n    <cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>\n    <cac:PayeeFinancialAccount>\n      <cbc:ID>DE89370400440532013000</cbc:ID>\n      <cbc:Name>Muster Software GmbH</cbc:Name>\n    </cac:PayeeFinancialAccount>\n  </cac:PaymentMeans>\n  <cac:TaxTotal>\n    <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n    <cac:TaxSubtotal>\n      <cbc:TaxableAmount currencyID=\"EUR\">150.00</cbc:TaxableAmount>\n      <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n      <cac:TaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:TaxCategory>\n    </cac:TaxSubtotal>\n  </cac:TaxTotal>\n  <cac:LegalMonetaryTotal>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">150.00</cbc:LineExtensionAmount>\n    <cbc:TaxExclusiveAmount currencyID=\"EUR\">150.00</cbc:TaxExclusiveAmount>\n    <cbc:TaxInclusiveAmount currencyID=\"EUR\">178.50</cbc:TaxInclusiveAmount>\n    <cbc:PayableAmount currencyID=\"EUR\">178.50</cbc:PayableAmount>\n  </cac:LegalMonetaryTotal>\n  <cac:InvoiceLine>\n    <cbc:ID>1</cbc:ID>\n    <cbc:InvoicedQuantity unitCode=\"HUR\">10</cbc:InvoicedQuantity>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">100.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Beratung</cbc:Name>\n      <cac:ClassifiedTaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:ClassifiedTaxCategory>\n    </cac:Item>\n    <cac:Price>\n      <cbc:PriceAmount currencyID=\"EUR\">10.00</cbc:PriceAmount>\n    </cac:Price>\n  </cac:InvoiceLine>\n  <cac:InvoiceLine>\n    <cbc:ID>2</cbc:ID>\n    <cbc:InvoicedQuantity unitCode=\"HUR\">5</cbc:InvoicedQuantity>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">50.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Support</cbc:Name>\n      <cac:ClassifiedTaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:ClassifiedTaxCategory>\n    </cac:Item>\n    <cac:Price>\n      <cbc:PriceAmount currencyID=\"EUR\">10.00</cbc:PriceAmount>\n    </cac:Price>\n  </cac:InvoiceLine>\n</Invoice>\n",
          "options": {
            "raw": {
              "language": "xml"
            }
          }
        },
        "description": "Accepts XRechnung/UBL/CII XML or a hybrid ZUGFeRD/Factur-X PDF (raw bytes as request body). Returns a validation report with rule findings. The file is processed in memory and never stored.\n\nThis request sends the valid XRechnung 3.0 sample — expect `\"valid\": true` with zero findings. A 200 response is also returned when the invoice is invalid; check `valid`."
      }
    },
    {
      "name": "Validate an e-invoice (invalid sample)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/xml"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/validate",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "validate"
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n         xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\n         xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>\n  <cbc:ID>RE-2026-0816</cbc:ID>\n  <cbc:IssueDate>2026-06-31</cbc:IssueDate>\n  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>\n  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>\n  <cac:AccountingSupplierParty>\n    <cac:Party>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Muster Software GmbH</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:PostalAddress>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n    </cac:Party>\n  </cac:AccountingSupplierParty>\n  <cac:AccountingCustomerParty>\n    <cac:Party>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Beispiel AG</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:PostalAddress>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n    </cac:Party>\n  </cac:AccountingCustomerParty>\n  <cac:TaxTotal>\n    <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n    <cac:TaxSubtotal>\n      <cbc:TaxableAmount currencyID=\"EUR\">150.00</cbc:TaxableAmount>\n      <cbc:TaxAmount currencyID=\"EUR\">30.00</cbc:TaxAmount>\n      <cac:TaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:TaxCategory>\n    </cac:TaxSubtotal>\n  </cac:TaxTotal>\n  <cac:LegalMonetaryTotal>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">140.00</cbc:LineExtensionAmount>\n    <cbc:TaxExclusiveAmount currencyID=\"EUR\">150.00</cbc:TaxExclusiveAmount>\n    <cbc:TaxInclusiveAmount currencyID=\"EUR\">178.50</cbc:TaxInclusiveAmount>\n    <cbc:PayableAmount currencyID=\"EUR\">170.00</cbc:PayableAmount>\n  </cac:LegalMonetaryTotal>\n  <cac:InvoiceLine>\n    <cbc:ID>1</cbc:ID>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">100.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Beratung</cbc:Name>\n    </cac:Item>\n  </cac:InvoiceLine>\n  <cac:InvoiceLine>\n    <cbc:ID>2</cbc:ID>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">50.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Support</cbc:Name>\n    </cac:Item>\n  </cac:InvoiceLine>\n</Invoice>\n",
          "options": {
            "raw": {
              "language": "xml"
            }
          }
        },
        "description": "The broken sample triggers several findings (missing buyer reference BR-DE-15, arithmetic mismatches BR-CO-*, …). The response is still HTTP 200 — validation problems live in `findings`, not in the status code. Each finding id is explained at https://billhorse.com/en/rules/<id>/."
      }
    },
    {
      "name": "Validate — German messages (?lang=de)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/xml"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/validate?lang=de",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "validate"
          ],
          "query": [
            {
              "key": "lang",
              "value": "de",
              "description": "Language of finding messages: de, en (default) or fr."
            }
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n         xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\n         xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>\n  <cbc:ID>RE-2026-0816</cbc:ID>\n  <cbc:IssueDate>2026-06-31</cbc:IssueDate>\n  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>\n  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>\n  <cac:AccountingSupplierParty>\n    <cac:Party>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Muster Software GmbH</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:PostalAddress>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n    </cac:Party>\n  </cac:AccountingSupplierParty>\n  <cac:AccountingCustomerParty>\n    <cac:Party>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Beispiel AG</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:PostalAddress>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n    </cac:Party>\n  </cac:AccountingCustomerParty>\n  <cac:TaxTotal>\n    <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n    <cac:TaxSubtotal>\n      <cbc:TaxableAmount currencyID=\"EUR\">150.00</cbc:TaxableAmount>\n      <cbc:TaxAmount currencyID=\"EUR\">30.00</cbc:TaxAmount>\n      <cac:TaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:TaxCategory>\n    </cac:TaxSubtotal>\n  </cac:TaxTotal>\n  <cac:LegalMonetaryTotal>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">140.00</cbc:LineExtensionAmount>\n    <cbc:TaxExclusiveAmount currencyID=\"EUR\">150.00</cbc:TaxExclusiveAmount>\n    <cbc:TaxInclusiveAmount currencyID=\"EUR\">178.50</cbc:TaxInclusiveAmount>\n    <cbc:PayableAmount currencyID=\"EUR\">170.00</cbc:PayableAmount>\n  </cac:LegalMonetaryTotal>\n  <cac:InvoiceLine>\n    <cbc:ID>1</cbc:ID>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">100.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Beratung</cbc:Name>\n    </cac:Item>\n  </cac:InvoiceLine>\n  <cac:InvoiceLine>\n    <cbc:ID>2</cbc:ID>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">50.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Support</cbc:Name>\n    </cac:Item>\n  </cac:InvoiceLine>\n</Invoice>\n",
          "options": {
            "raw": {
              "language": "xml"
            }
          }
        },
        "description": "Finding messages default to English. Add `?lang=de` or `?lang=fr` to /validate and /parse to localize `message` for your end users. Rule ids and `expected`/`actual`/`found` stay language-neutral."
      }
    },
    {
      "name": "Parse an e-invoice into normalized JSON",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/xml"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/parse",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "parse"
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n         xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\n         xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>\n  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>\n  <cbc:ID>RE-2026-0815</cbc:ID>\n  <cbc:IssueDate>2026-06-15</cbc:IssueDate>\n  <cbc:DueDate>2026-07-15</cbc:DueDate>\n  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>\n  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>\n  <cbc:BuyerReference>04011000-12345-03</cbc:BuyerReference>\n  <cac:AccountingSupplierParty>\n    <cac:Party>\n      <cac:PartyName>\n        <cbc:Name>Muster Software GmbH</cbc:Name>\n      </cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Beispielstraße 1</cbc:StreetName>\n        <cbc:CityName>Berlin</cbc:CityName>\n        <cbc:PostalZone>10115</cbc:PostalZone>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyTaxScheme>\n        <cbc:CompanyID>DE123456789</cbc:CompanyID>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:PartyTaxScheme>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Muster Software GmbH</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n      <cac:Contact>\n        <cbc:Name>Erika Muster</cbc:Name>\n        <cbc:Telephone>+49 30 1234567</cbc:Telephone>\n        <cbc:ElectronicMail>rechnung@muster-software.de</cbc:ElectronicMail>\n      </cac:Contact>\n    </cac:Party>\n  </cac:AccountingSupplierParty>\n  <cac:AccountingCustomerParty>\n    <cac:Party>\n      <cac:PartyName>\n        <cbc:Name>Beispiel AG</cbc:Name>\n      </cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Kundenweg 2</cbc:StreetName>\n        <cbc:CityName>Hamburg</cbc:CityName>\n        <cbc:PostalZone>20095</cbc:PostalZone>\n        <cac:Country>\n          <cbc:IdentificationCode>DE</cbc:IdentificationCode>\n        </cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyLegalEntity>\n        <cbc:RegistrationName>Beispiel AG</cbc:RegistrationName>\n      </cac:PartyLegalEntity>\n    </cac:Party>\n  </cac:AccountingCustomerParty>\n  <cac:PaymentMeans>\n    <cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>\n    <cac:PayeeFinancialAccount>\n      <cbc:ID>DE89370400440532013000</cbc:ID>\n      <cbc:Name>Muster Software GmbH</cbc:Name>\n    </cac:PayeeFinancialAccount>\n  </cac:PaymentMeans>\n  <cac:TaxTotal>\n    <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n    <cac:TaxSubtotal>\n      <cbc:TaxableAmount currencyID=\"EUR\">150.00</cbc:TaxableAmount>\n      <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n      <cac:TaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:TaxCategory>\n    </cac:TaxSubtotal>\n  </cac:TaxTotal>\n  <cac:LegalMonetaryTotal>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">150.00</cbc:LineExtensionAmount>\n    <cbc:TaxExclusiveAmount currencyID=\"EUR\">150.00</cbc:TaxExclusiveAmount>\n    <cbc:TaxInclusiveAmount currencyID=\"EUR\">178.50</cbc:TaxInclusiveAmount>\n    <cbc:PayableAmount currencyID=\"EUR\">178.50</cbc:PayableAmount>\n  </cac:LegalMonetaryTotal>\n  <cac:InvoiceLine>\n    <cbc:ID>1</cbc:ID>\n    <cbc:InvoicedQuantity unitCode=\"HUR\">10</cbc:InvoicedQuantity>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">100.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Beratung</cbc:Name>\n      <cac:ClassifiedTaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:ClassifiedTaxCategory>\n    </cac:Item>\n    <cac:Price>\n      <cbc:PriceAmount currencyID=\"EUR\">10.00</cbc:PriceAmount>\n    </cac:Price>\n  </cac:InvoiceLine>\n  <cac:InvoiceLine>\n    <cbc:ID>2</cbc:ID>\n    <cbc:InvoicedQuantity unitCode=\"HUR\">5</cbc:InvoicedQuantity>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">50.00</cbc:LineExtensionAmount>\n    <cac:Item>\n      <cbc:Name>Support</cbc:Name>\n      <cac:ClassifiedTaxCategory>\n        <cbc:ID>S</cbc:ID>\n        <cbc:Percent>19</cbc:Percent>\n        <cac:TaxScheme>\n          <cbc:ID>VAT</cbc:ID>\n        </cac:TaxScheme>\n      </cac:ClassifiedTaxCategory>\n    </cac:Item>\n    <cac:Price>\n      <cbc:PriceAmount currencyID=\"EUR\">10.00</cbc:PriceAmount>\n    </cac:Price>\n  </cac:InvoiceLine>\n</Invoice>\n",
          "options": {
            "raw": {
              "language": "xml"
            }
          }
        },
        "description": "Extracts the semantic invoice model (EN 16931 business terms) from XML or hybrid PDF into a stable, format-independent JSON structure — the same shape regardless of whether the input was UBL, CII or a ZUGFeRD PDF. Includes the validation report.\n\nReturns 422 when the input has no recognizable UBL/CII/ZUGFeRD structure; the body then contains only the report."
      }
    },
    {
      "name": "Generate an e-invoice (JSON model → CII)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/generate?format=cii",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "generate"
          ],
          "query": [
            {
              "key": "format",
              "value": "cii",
              "description": "Target syntax: cii (default), ubl, peppol (Peppol BIS Billing 3.0) or xrechnung (XRechnung 3.0 UBL)."
            }
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"number\": \"RE-2026-001\",\n  \"issueDate\": \"2026-01-15\",\n  \"typeCode\": \"380\",\n  \"currency\": \"EUR\",\n  \"buyerReference\": \"04011000-12345-06\",\n  \"seller\": { \"name\": \"Muster Verkäufer GmbH\", \"vatId\": \"DE123456789\", \"address\": { \"line1\": \"Hauptstraße 1\", \"city\": \"Berlin\", \"postcode\": \"10115\", \"country\": \"DE\" } },\n  \"buyer\": { \"name\": \"Käufer AG\", \"address\": { \"line1\": \"Marktplatz 5\", \"city\": \"München\", \"postcode\": \"80331\", \"country\": \"DE\" } },\n  \"lines\": [ { \"id\": \"1\", \"name\": \"Beratung\", \"quantity\": \"1\", \"unitCode\": \"C62\", \"netPrice\": \"100.00\", \"lineAmount\": \"100.00\", \"vatCategory\": \"S\", \"vatRate\": \"19\" } ],\n  \"vat\": [ { \"category\": \"S\", \"rate\": \"19\", \"taxable\": \"100.00\", \"tax\": \"19.00\" } ],\n  \"totals\": { \"lineTotal\": \"100.00\", \"taxBasis\": \"100.00\", \"taxTotal\": \"19.00\", \"grandTotal\": \"119.00\", \"due\": \"119.00\" },\n  \"payment\": { \"typeCode\": \"58\", \"iban\": \"DE89370400440532013000\" },\n  \"dueDate\": \"2026-02-14\"\n}\n",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "description": "PREVIEW. Build a standards-conformant EN 16931 e-invoice from a JSON model. `?format=cii` (UN/CEFACT, the syntax embedded in ZUGFeRD/Factur-X), `ubl` (OASIS UBL), `peppol` (Peppol BIS Billing 3.0, a UBL CIUS — needs seller/buyer electronic addresses) or `xrechnung` (XRechnung 3.0 UBL — needs seller contact, payment means and a buyer reference/Leitweg-ID for BR-DE). Returns the XML document. An invalid model returns 400 invalid_model."
      }
    },
    {
      "name": "Convert an e-invoice (UBL → CII)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/xml"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/convert?format=cii",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "convert"
          ],
          "query": [
            {
              "key": "format",
              "value": "cii",
              "description": "Target syntax: cii (default), ubl, peppol (Peppol BIS Billing 3.0) or xrechnung (XRechnung 3.0 UBL)."
            }
          ]
        },
        "body": {
          "mode": "raw",
          "raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n         xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"\n         xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\">\n  <cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>\n  <cbc:ID>RE-2026-0815</cbc:ID>\n  <cbc:IssueDate>2026-06-15</cbc:IssueDate>\n  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>\n  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>\n  <cac:AccountingSupplierParty>\n    <cac:Party>\n      <cac:PartyName><cbc:Name>Muster Software GmbH</cbc:Name></cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Beispielstraße 1</cbc:StreetName>\n        <cbc:CityName>Berlin</cbc:CityName>\n        <cbc:PostalZone>10115</cbc:PostalZone>\n        <cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyTaxScheme><cbc:CompanyID>DE123456789</cbc:CompanyID><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:PartyTaxScheme>\n      <cac:PartyLegalEntity><cbc:RegistrationName>Muster Software GmbH</cbc:RegistrationName></cac:PartyLegalEntity>\n    </cac:Party>\n  </cac:AccountingSupplierParty>\n  <cac:AccountingCustomerParty>\n    <cac:Party>\n      <cac:PartyName><cbc:Name>Beispiel AG</cbc:Name></cac:PartyName>\n      <cac:PostalAddress>\n        <cbc:StreetName>Kundenweg 2</cbc:StreetName>\n        <cbc:CityName>Hamburg</cbc:CityName>\n        <cbc:PostalZone>20095</cbc:PostalZone>\n        <cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country>\n      </cac:PostalAddress>\n      <cac:PartyLegalEntity><cbc:RegistrationName>Beispiel AG</cbc:RegistrationName></cac:PartyLegalEntity>\n    </cac:Party>\n  </cac:AccountingCustomerParty>\n  <cac:PaymentMeans>\n    <cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>\n    <cac:PayeeFinancialAccount><cbc:ID>DE89370400440532013000</cbc:ID></cac:PayeeFinancialAccount>\n  </cac:PaymentMeans>\n  <cac:TaxTotal>\n    <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n    <cac:TaxSubtotal>\n      <cbc:TaxableAmount currencyID=\"EUR\">150.00</cbc:TaxableAmount>\n      <cbc:TaxAmount currencyID=\"EUR\">28.50</cbc:TaxAmount>\n      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>\n    </cac:TaxSubtotal>\n  </cac:TaxTotal>\n  <cac:LegalMonetaryTotal>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">150.00</cbc:LineExtensionAmount>\n    <cbc:TaxExclusiveAmount currencyID=\"EUR\">150.00</cbc:TaxExclusiveAmount>\n    <cbc:TaxInclusiveAmount currencyID=\"EUR\">178.50</cbc:TaxInclusiveAmount>\n    <cbc:PayableAmount currencyID=\"EUR\">178.50</cbc:PayableAmount>\n  </cac:LegalMonetaryTotal>\n  <cac:InvoiceLine>\n    <cbc:ID>1</cbc:ID>\n    <cbc:InvoicedQuantity unitCode=\"HUR\">10</cbc:InvoicedQuantity>\n    <cbc:LineExtensionAmount currencyID=\"EUR\">150.00</cbc:LineExtensionAmount>\n    <cac:Item><cbc:Name>Beratung</cbc:Name><cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory></cac:Item>\n    <cac:Price><cbc:PriceAmount currencyID=\"EUR\">15.00</cbc:PriceAmount></cac:Price>\n  </cac:InvoiceLine>\n</Invoice>\n",
          "options": {
            "raw": {
              "language": "xml"
            }
          }
        },
        "description": "PREVIEW. Parse any e-invoice (UBL, CII or hybrid ZUGFeRD/Factur-X PDF) and re-emit it in the target syntax set by `?format=cii|ubl|peppol|xrechnung`. Returns the converted XML. Unparseable input returns 422 unparseable."
      }
    },
    {
      "name": "Service health and engine version",
      "request": {
        "auth": {
          "type": "noauth"
        },
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/health",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "health"
          ]
        },
        "description": "Public endpoint (no API key required). Returns `{ \"status\": \"ok\", \"engine\": \"billhorse-core …\" }`."
      }
    }
  ]
}
