Independent AI agent for EU Deforestation Regulation compliance, not affiliated with the EU. Scope & disclaimer →
eudr.dev

The 7 commodities and Annex I HS codes

Annex I of Reg. (EU) 2023/1115 lists the seven commodities and the customs codes that bring them into scope. The full Annex I is several hundred specific HS subheadings. The table below shows the umbrella families.

CommodityAnnex I HS families (illustrative — not exhaustive)
Cattle0102 (live), 0201 (fresh meat), 0202 (frozen meat), 0206 (offal), 0210 (preserved), 4101–4115 (hides + leather products).
Cocoa1801 (beans), 1802 (shells/husks), 1803 (paste), 1804 (butter/fat/oil), 1805 (powder), 1806 (chocolate).
Coffee0901 (roasted or not).
Oil palm1511 (palm oil), 1513 (palm kernel oil), 1518 (treated), 2306 (oilcake), 2905, 2915, 3823, 3826 (derived).
Rubber4001 (natural latex/rubber), 4005–4007, 4008–4017 (sheeting + manufactured), 4011–4013 (tyres), 4014–4017 (articles).
Soya1201 (beans), 1208 (flours), 1507 (oil + fractions), 2304 (oilcake).
WoodChapter 44 (most subheadings), Ch. 47 (pulp), Ch. 48 (paper + paperboard), 9401, 9403, 9406 (furniture + structures).

The canonical mapping the engine uses is at /v1/reference/commodities. The full Annex I list with subheadings is in Annex I of Reg. (EU) 2023/1115.

What counts as "in scope"

The Regulation reaches the commodity AND its derived products. A leather wallet (HS 4202) is in scope via cattle; a chocolate bar (HS 1806) is in scope via cocoa; a print book (HS 4901) is in scope via wood pulp. Annex I lists each derived subheading explicitly. If the HS code is in Annex I, the product is in scope.

If your HS code is NOT in Annex I, the regulation does not reach the shipment.

Edge cases worth knowing

How to check your HS code

curl https://eudr.dev/v1/reference/commodities | jq

returns the engine's commodity → HS prefix map. If your HS code's first 4–8 digits match a listed prefix, you're in scope.

The eudr.compliance.dds.compile skill validates HS codes against Annex I as part of the pipeline; an out-of-scope code returns a not_in_scope verdict without consuming any emem cells.

See also

Authoritative sources