Skip to main content

Germany EPR report format

Last verified

Germany reports in a XML file of 8 columns laid out by Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register. Reviewed September 30, 2026. Instica measures, estimates and prepares the file from your weights; you sign in to the portal and submit it yourself.

Shape of the Germany report file: 8 columns in a XML fileXML (Portal: LUCID XML upload. The customer signs in, uploads the file, checks the displayed data and confirms.): VersionNoInterface, PackagingTypeCode, TypeOfReportCode, ReportingPeriodFrom, ReportingPeriodTo, ListOfSystemOperators/SystemOperator/SystemOperatorID, ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCode, ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MassXMLPortal: LUCID XML upload. The customer signs in, uploads t…VersionNoInterface—PackagingTypeCode—TypeOfReportCode—ReportingPeriodFr…—ReportingPeriodTo—ListOfSystemOpera…—ListOfSystemOpera…—ListOfSystemOpera…—Example →
Germany: the columns of the report file, with a sample value for each Source: verpackungsregister.org, retrieved September 30, 2026
Produce this file from measured dataSee a golden example

The free plan is enough to start. We estimate and prepare; you sign and submit.

Germany: the report file at a glance

Germany: this page describes the report file that Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register accepts. The layout comes from a published specification, so the columns, their order and their codes follow the recipient’s own document. The file is a XML file, with 8 columns, 8 of them required.

The file is one XML document whose elements are the columns below. It is encoded as UTF-8-SIG, and decimals use a comma. Weights are in kilograms, reported for the calendar year.

Numbers are rounded to 3 decimals, halves round up (Instica’s rounding choice, not set by the regulator), line by line. Plastic component counts are not part of this file. The table below lists every attribute with its value; the sections after it explain each column, give a worked example, and list the checks that run before you upload.

Where this file layout comes from

The layout of the Germany file is taken from a specification that Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register publishes. Instica reads the specification, records the columns, codes and rules it states, and keeps the passage it relied on next to this page. Where the specification and this page ever differ, the specification is right, and the source link below opens it.

The recipient also offers an official sample or template, linked below. Compare your prepared file with it before you upload; the sample is the quickest way to see whether a column is out of place.

Original wording

Mass: packaging material mass in kg to the third decimal place without thousands separators (decimal place demarcated with comma).
Paraphrase: This passage is the basis for the file layout described on this page.

Source: verpackungsregister.org

Specification as recorded (English):

Original wording

XML producer volume report with elements VersionNoInterface, PackagingTypeCode, TypeOfReportCode, ReportingPeriodFrom, ReportingPeriodTo and one SystemOperator with its SystemOperatorID and a Material list (MaterialCode, Mass).

Source: verpackungsregister.org

Note recorded in the data (English):

Original wording

Schema read from https://www.verpackungsregister.org/fileadmin/LUCID/Hersteller_Datenmeldung_Schema.xsd and sample from https://www.verpackungsregister.org/fileadmin/files/LUCID/Hersteller_Datenmeldung_Beispiel.xml. The guide requires UTF-8 with BOM. The guide's material table is read from extracted PDF text, so the VerpackG column assignment of 60000 is inferred from the table layout.

Source: verpackungsregister.org

Official sample or template: verpackungsregister.org

Every column, with its meaning and an example

The Germany file has 8 columns, listed in file order in the table below. Every column is required. Each column is then explained on its own: what goes in it, where Instica takes the value from, and the mistake that most often breaks it.

Values in the “filled from” column come from the data you have measured or entered in Instica: a fixed value is the same on every row, a material line value changes from row to row, and a report value is the same for the whole file.

Germany: columns of the report file
ColumnTypeRequiredUnitFilled from
VersionNoInterfacetextYesNonefixed: 1.0
PackagingTypeCodetextYesNonefixed: V
TypeOfReportCodelist valueYesNonefixed: HJM1
ReportingPeriodFromdateYesNonethe report itself
ReportingPeriodTodateYesNonethe report itself
ListOfSystemOperators/SystemOperator/SystemOperatorIDtextYesNoneyour registration identity
ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCodelist valueYesNoneeach material line
ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MassdecimalYeskilogramseach material line

“VersionNoInterface”

Column “VersionNoInterface” holds text and must not be empty. Its value is fixed at “1.0” on every row, so there is nothing for you to type.

Note recorded in the data (English):

Original wording

Technical interface version; the guide gives 1.0.

Source: verpackungsregister.org

“PackagingTypeCode”

Column “PackagingTypeCode” holds text and must not be empty. Its value is fixed at “V” on every row, so there is nothing for you to type.

Note recorded in the data (English):

Original wording

Code for packaging. Other codes are not permitted at this time.

Source: verpackungsregister.org

“TypeOfReportCode”

Column “TypeOfReportCode” holds one value from a fixed list and must not be empty. Its value is fixed at “HJM1” on every row, so there is nothing for you to type. Only 5 values are accepted, for example “HPM1”, “HMM1” and “HJM1” and others; any other text is rejected.

Note recorded in the data (English):

Original wording

HJM1 is the year-end volume report, a full report. Instica's choice of report type; the customer can change it in the file before upload.

Source: verpackungsregister.org

“ReportingPeriodFrom”

Column “ReportingPeriodFrom” holds a date and must not be empty. It describes the report as a whole, for example the period it covers, and is the same on every row. Write the date in the form the layout shows in the worked example, with no time of day.

“ReportingPeriodTo”

Column “ReportingPeriodTo” holds a date and must not be empty. It describes the report as a whole, for example the period it covers, and is the same on every row. Write the date in the form the layout shows in the worked example, with no time of day.

“ListOfSystemOperators/SystemOperator/SystemOperatorID”

Column “ListOfSystemOperators/SystemOperator/SystemOperatorID” holds text and must not be empty. It comes from your registration with the recipient, so enter your identifier exactly as the recipient issued it. The value must match the pattern ^[A-Z]{2}[0-9]{13}$.

Note recorded in the data (English):

Original wording

ZSVR identification number of the customer's dual system operator (guide table 2.3.4). The customer supplies it.

Source: verpackungsregister.org

“ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCode”

Column “ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCode” holds one value from a fixed list and must not be empty. It changes from row to row, one value for each material line you report. Only 8 values are accepted, for example “10000”, “20000” and “30000” and others; any other text is rejected.

Note recorded in the data (English):

Original wording

VerpackG material codes for reports 2019 to 2026. 10000 glass, 20000 paper, paperboard and cardboard, 30000 ferrous metals, 40000 aluminium, 50000 plastics, 60000 beverage cartons, 70000 other composite packaging, 80000 other materials. Reports from 2027 use the VerpackDG codes, which are not encoded here.

Source: verpackungsregister.org

“ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/Mass”

Column “ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/Mass” holds a decimal number and must not be empty. It changes from row to row, one value for each material line you report. Values are in kilograms, with 3 decimals. The value must match the pattern ^-?\d{1,15},\d{3}$. Write the decimal separator as a comma and never add a thousands separator.

A worked example, row by row

The worked example is a synthetic XML document for Germany. It shows the elements in the order the layout expects, with invented weights. The sample is written by Instica for tests and for this page, and it is not a filing.

Read it from the top: the header elements state the version, the type of report and the period, and the lines below carry one material each with its weight.

  • VersionNoInterface: 1.0
  • PackagingTypeCode: V
  • TypeOfReportCode: HJM1
  • ReportingPeriodFrom: 2026-01-01
  • ReportingPeriodTo: 2026-12-31
  • SystemOperatorID: DE1111111111111
  • MaterialCode: 10000
  • Mass: 1250,500
  • MaterialCode: 20000
  • Mass: 830,250
  • MaterialCode: 30000
  • Mass: 54,125

The elements the example uses are “VersionNoInterface”, “PackagingTypeCode”, “TypeOfReportCode”, “ReportingPeriodFrom”, “ReportingPeriodTo”, “SystemOperatorID”, “MaterialCode”, “Mass”, “Root” and “ListOfSystemOperators” and others.

Compare it with the official sample linked in the origin section above.

How Instica groups your materials into lines

Before the file is written, Instica groups your measured weights into the lines the layout asks for. For Germany the grouping uses the category list “DE-ZSVR-material-codes”, version VerpackG 2019-2026, and one line is written for each distinct combination of “system_operator_id” and “material_code”.

Two products that share a category are added together on one line; two products in different categories stay on separate lines. Each weight keeps its data-quality tier (measured, supplier, estimated or declared) inside Instica, and the file carries only the rounded total.

Note recorded in the data (English):

Original wording

One Material element per material code. epr/data/material_taxonomy.yaml holds the CalRecycle categories only, so the product lines must carry the ZSVR material code as their category code. A material with 0,000 kg may be left out instead of written.

Source: verpackungsregister.org

The checks Instica runs before you upload

Instica runs 5 checks on the Germany file before you take it to the portal: 5 that block the file. A blocking check means the recipient’s service would very likely refuse or misread the file, so fix the row it names and prepare the file again.

A check is a test of your file, never a judgement of your business. Passing every check shows that the file has the right shape; it does not show that the numbers are right, which is why every weight keeps its data-quality tier.

Germany: checks and the columns they cover
CheckKindColumnsLevel
required-columnsrequired-value checksystem_operator_id, material_code, massBlocks the file
material-knownallowed-values checkmaterial_codeBlocks the file
mass-formatpattern checkmassBlocks the file
report-type-formatpattern checktype_of_report_codeBlocks the file
unique-materialuniqueness checksystem_operator_id, material_codeBlocks the file

required-columns

Required-value check: “system_operator_id”, “material_code” and “mass” must not be blank on any row. This check blocks the file until it is fixed. Message shown (English as recorded): “These values cannot be blank”.

material-known

Allowed-values check: “material_code” must be one of the values the layout lists. This check blocks the file until it is fixed. Message shown (English as recorded): “Material code must be a VerpackG code”.

mass-format

Pattern check: “mass” must match the form the layout specifies (^-?\d{1,15},\d{3}$). This check blocks the file until it is fixed. Message shown (English as recorded): “Mass is kilograms with a comma and exactly three decimals, no thousands separator”.

report-type-format

Pattern check: “type_of_report_code” must match the form the layout specifies (^H[PMJNA]M1$). This check blocks the file until it is fixed. Message shown (English as recorded): “Report type must match the schema pattern”.

unique-material

Uniqueness check: the combination of “system_operator_id” and “material_code” may appear on only one row. This check blocks the file until it is fixed. Message shown (English as recorded): “Each material code appears once per system operator”.

Why a file gets sent back, and what to look at

A report file is sent back for a handful of repeating reasons. The list below is written from the layout for Germany; each item says what to look at first. Instica’s own messages are short, so this section explains the cause behind them.

  • The wrong encoding. The file is expected as UTF-8-SIG. Names with accents or other special characters turn into symbols when a file is saved in another encoding; if a name looks broken, save the file again as UTF-8-SIG.
  • The wrong decimal separator. Decimals use a comma in this layout. Using the other mark can make a weight read as text or as a thousand times too large.
  • Weights in the wrong unit. Weights are in kilograms. A figure in another unit is a legitimate number and still a wrong one, so convert before you prepare the file. Instica keeps your original unit and converts at the end.
  • The wrong period. The layout reports for the calendar year. A file covering a different span, or two periods mixed on one set of rows, is the commonest reason for a correction request.
  • Duplicate lines. The same combination of columns appears on two rows. Merge the rows and add the weights; one line per combination is the rule.
  • A value outside the list or pattern. A code or category is spelled differently from the recipient’s list. Copy the value from the list rather than retyping it.
  • Blank or negative weights. A blank cell, a negative weight or a text value in a weight column fails before any other check. Remove empty rows, and enter a true zero where nothing was supplied.
  • A layout that is not yet published. The recipient can change its layout between reporting periods. Check the specification again before each submission; this page is updated at its next review.

From file to portal: the steps you take yourself

Instica prepares the file; you sign in and submit it yourself. For Germany the recipient is Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register.

Instica never asks for, stores or uses your portal credentials, and it never submits anything for you. The steps below are what you do once the file is ready.

Submission channel recorded in the data (English):

Original wording

LUCID XML upload. The customer signs in, uploads the file, checks the displayed data and confirms.

Source: verpackungsregister.org

  1. Finish measuring: confirm that every product has its packaging weights and that no weight is flagged as unresolved.
  2. Prepare the file in Instica. It writes the XML file in the layout above and runs the 5 checks.
  3. Open the file and read it with your own eyes: the period, the totals and a few lines you can verify against your records.
  4. Compare the file with the official sample, if the recipient offers one.
  5. Sign in to the recipient’s service with your own credentials. Instica never stores regulator-portal credentials; you sign and submit the report.
  6. Upload the file, or key the numbers into the form if the service does not take a file, and read the summary the service shows you.
  7. Confirm and submit. The signature and the submission are yours; keep the confirmation the service gives you.
  8. Download the file again from Instica for your records; it is locked once you finalise the report.

See the deadlines for this jurisdiction

Questions about the Germany report format

What file does Germany use for the EPR report?

The layout described on this page is a XML file with 8 columns, encoded as UTF-8-SIG. It follows the recipient’s published specification.

Does Instica submit the report for me?

No. Instica measures, estimates and prepares the weights and the file. You sign in to the recipient’s service with your own credentials and submit it yourself; Instica never stores portal credentials.

Which unit and period does the Germany file use?

Weights are in kilograms, reported for the calendar year, rounded to 3 decimals, halves round up (Instica’s rounding choice, not set by the regulator).

Is the example file a real filing?

No. The example is synthetic: the weights are invented and it was written to show the shape of a finished file. It must never be submitted.

What if the recipient changes the layout?

The recipient’s specification prevails. This page is reviewed on a schedule, and every review shows the date it was last checked; open the source before each submission.

How to read this page

Our reviewers.

Sources

  1. verpackungsregister.org retrieved
    Original wording: Mass: packaging material mass in kg to the third decimal place without thousands separators (decimal place demarcated with comma).