LIVE
CBAM CERT · Q2 2026€75.28/tSURRENDER30 SEP 2027CERT PURCHASE OPENS1 FEB 2027Reg (EU) 2023/956ACTIVEIR (EU) 2025/2621ACTIVEIR (EU) 2025/2620ACTIVEReg (EU) 2025/2083ACTIVEXSDMONITOREDSECTORS IN SCOPE6
Academy

Guide 07

The CBAM XML declaration, explained

What the schema fixes, how one imported good is structured, and what is not yet published.


Section 01

The file, not the form

A CBAM declaration is a machine-readable XML file, not a form somebody fills in on screen. Its shape is fixed in advance by an XML Schema Definition — an XSD — published by the Commission. The XSD is the contract: it names every element, states the order elements appear in, and constrains the characters each value may carry.

That has a practical consequence. There is no free text where a judgement call can be written down and no cell where a note explains an unusual figure. Every fact about a consignment has to land in the element the schema reserves for it, in the form the schema allows, or it is not a declaration at all — it is a file the receiving system cannot read.

This guide reads the transitional Quarterly Report schema element by element, because it is the CBAM schema the Commission has actually published.

Section 02

What the schema fixes

At the top of the file sits a single QReport element. Everything else hangs beneath it. The fragment below reproduces the elements the schema places directly under that root, with the type code each one carries.

QReport
  • ReportingPeriodan2
  • Yearn4
  • Declarant
    • IdentificationNumberan..17
    • Namean..70
    • Rolean..5
    • ActorAddress
  • ImportedGoodmaxOccurs 99999

DG TAXUD, CBAM XSD Version 23.00 (April 2025)

The transitional Quarterly Report schema, reproduced from the package the Commission publishes for CBAM reporting declarants. Element names and type codes on this page are taken from that file unchanged.

Read the codes as constraints. an2 is two alphanumeric characters, n4 is four numeric characters, an..17 is up to seventeen alphanumeric characters. Declarant carries no type code because it is a container: it holds four child elements rather than a value of its own. ImportedGood repeats, once per good in the reporting period.

Section 03

Inside one good

ImportedGood is where the substance of a declaration sits. One element repeats for every good, and each repetition carries its own classification, origin, quantity and emissions.

ImportedGood
  • ItemNumbern..5
  • CommodityCode
    • HsCodean6
    • CnCodean8
  • OriginCountry
    • Countrya2
  • ImportedQuantityminOccurs 1 maxOccurs 9
  • GoodsEmissionsminOccurs 1 maxOccurs 999

The type codes are constraints, not decoration. an8 on CnCode means a CN code of exactly eight characters — not seven, not ten, not eight digits with a separator. a2 on Country means two alphabetic characters, the ISO country code and nothing else. A value that does not conform is rejected on structure before anything about the emissions figure it carries is assessed.

That is why the ordinary failure on a CBAM submission is rarely a disputed emissions number. It is a CN code carried over from a commercial invoice with a dot in it, a country written as a name instead of a code, or a quantity element that repeats more times than the schema permits.

Section 04

What is not yet published

One distinction matters more than any element on this page. The transitional quarterly report schema is published by the Commission and is the file described above. The annual declaration schema for the definitive regime is not yet public — no XSD for it has been released.

Anyone claiming today to produce a file that conforms to the definitive-regime schema is describing something that has no published definition to conform to.

Carbon Mandate prepares against the declaration structure the Commission has specified: the published transitional schema where it applies, and the data model set out in the Regulation and its implementing acts for the definitive regime. When the annual schema is published, the preparation work moves onto it. We prepare the declaration package; the EU importer files it.

Next guide08 How to produce a declaration