EU semantic invoices and validations

Use this when you send invoices with sendtype: "peppol". These fields help you pass common EU semantic validations.

Prerequisite: use the exact pricing method

Peppol validations often fail with the “simple method”. Use the “exact way” for prices and totals.

Prices on the invoice row

Required fields on payrow

Add these fields to each invoice row:

  • rowpositionidentifier Unique row identifier. Example: "1".

  • itemtypeun Unit code for the row quantity. Example: "PCS". Code list: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNECERec20/

  • priceunitun Unit code for the unit price basis. Use this when validations require it. Example: "PCS". Code list: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNECERec20/

  • vatcode VAT category code for the row. Example: "S". Code list: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL5305/

Required properties on dataset-level propertyrow

Add these entries under the same dataset object. Do not add them inside a payrow item.

{
    "datastream": {
        "dataset": [
            {
                "address": "Example street 1",
                "billdate": "2026-02-06",
                "city": "Helsinki",
                "company": "Example Company",
                "customertype": "1",
                "jobtype": "0",
                "netamount": "100.00",
                "paydate": "2026-02-20",
                "payrow": [
                    {
                        "amount": "100.00",
                        "count": "1",
                        "desc": "Service",
                        "itemtypeun": "PCS",
                        "netamount": "100.00",
                        "priceunitun": "PCS",
                        "propertyrow": [
                            {
                                "propname": "final_amount",
                                "propvalue": "100.00"
                            }
                        ],
                        "rowpositionidentifier": "1",
                        "taxpr": "24",
                        "totalamount": "124.00",
                        "vatamount": "24.00",
                        "vatcode": "S"
                    }
                ],
                "postcode": "00100",
                "propertyrow": [
                    {
                        "propname": "receiver_identifier",
                        "propvalue": "5565978888"
                    },
                    {
                        "propname": "receiver_identifier_type",
                        "propvalue": "0007"
                    },
                    {
                        "propname": "payment_means_code",
                        "propvalue": "30"
                    },
                    {
                        "propname": "rows_total_vat_excluded_amount",
                        "propvalue": "100.00"
                    },
                    {
                        "propname": "invoice_total_vat_included_amount",
                        "propvalue": "124.00"
                    }
                ],
                "sendtype": "peppol",
                "taxrow": [
                    {
                        "netamount": "100.00",
                        "taxpr": "24",
                        "totalamount": "124.00",
                        "vatamount": "24.00",
                        "vatcode": "S"
                    }
                ],
                "totalamount": "124.00",
                "vatamount": "24.00",
                "yourcode": "test"
            }
        ]
    }
}

Property definitions

  • buyer_article_identifier Buyer’s item identifier.

  • final_amount Unit price after discounts.

  • receiver_identifier and receiver_identifier_type Recipient identifier and its scheme. Use the values required by the recipient.

  • payment_means_code Payment method code. Code list: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL4461/

  • rows_total_vat_excluded_amount Sum of all row net amounts. Excludes VAT.

  • invoice_total_vat_included_amount Invoice total including VAT.

Common validation pitfalls

  • Missing unit codes (itemtypeun, priceunitun).

  • Duplicate rowpositionidentifier values.

  • Totals not matching the row sums.

  • Using the “simple method” pricing.

Last updated

Was this helpful?