# Hs Classification

> Use when classifying a product under the Harmonized System, assigning an HS / CN / HTS / TN VED code, reconciling tariff nomenclatures across countries, applying the General Rules of Interpretation, requesting a Binding Tariff Information ruling, or resolving a classification that drives duty, dangerous-goods, and restriction outcomes from a part number or product description

- Skill: `cleo-labs-ia/hs-classification` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cleo-labs-ia/hs-classification`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cleo-labs-ia/hs-classification/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cleo-labs-ia (https://skillmd.com/u/cleo-labs-ia)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cleo-labs-ia/hs-classification

---


# HS Classification

The customs nomenclature layer. One classification drives duty rate, import/export controls, dangerous-goods rules, and product restrictions — so the code must be defensible, not guessed. This skill classifies from a part number, description, and composition using the General Rules of Interpretation, reconciles the code across national nomenclatures, and routes the result to the regimes it unlocks.

**Boundary:** `customs-and-trade` owns duty calculation, landed cost, dual-use and sanctions screening; `dangerous-goods-transport` owns UN transport rules; the vertical skills own product safety. This skill owns the **classification itself** — the input every one of those depends on.

## MCP Tools

```
# Classify from description / composition (returns candidate headings + confidence)
mcp__claude_ai_CLEO_LEGAL_API__customs/classify
  description: "<commercial + technical description>"
  composition: "<materials / chemistry>"
  intended_use: "<function>"

# Search for classification and nomenclature-change signals
mcp__claude_ai_Cleo_Insight__search_signals(q="HS code reclassification", limit=25)
mcp__claude_ai_Cleo_Insight__search_signals(q="combined nomenclature update", limit=25)
mcp__claude_ai_Cleo_Insight__search_signals(q="tariff classification ruling", limit=25)

# Pull the restrictions that attach to a classified code
mcp__claude_ai_Cleo_Insight__get_regulation(id="<regulation-id>")
```

## Classification Decision Tree

```dot
digraph {
  rankdir=TB; node [shape=box style=rounded fontsize=10];
  start [label="Part number / product\n+ description + composition + use"];
  cand [label="Identify candidate\nheadings (4-digit)"];
  notes [label="Read Section + Chapter\nNotes (legally binding)" shape=diamond];
  gri [label="Apply GRI 1 -> 6\nin order"];
  ec [label="Essential character\n(GRI 3b) for mixtures\n/ composite goods" shape=diamond];
  sub [label="Resolve 6-digit HS,\nthen national subheading\n(CN8 / HTS10 / TN VED...)"];
  conf [label="Confidence?" shape=diamond];
  bti [label="Request Binding Tariff\nInformation / advance ruling"];
  feed [label="Route to: duty, controls,\ndangerous goods, restrictions"];

  start -> cand -> notes -> gri -> ec -> sub -> conf;
  conf -> feed [label="high + single heading"];
  conf -> bti [label="ambiguous / high value"];
  bti -> feed;
}
```

## The Harmonized System Structure

The HS is the WCO global standard: **21 sections, 97 chapters, ~5,000 six-digit subheadings**, revised about every five years (HS 2022 in force; HS 2027 in preparation). The first 6 digits are shared worldwide. Digits beyond 6 are **national** and diverge by country.

| Level | Digits | Set by | Example (lipstick) |
|-------|--------|--------|--------------------|
| HS subheading | 6 | WCO (global) | 3304.10 |
| EU Combined Nomenclature (CN) | 8 | EU | 3304.10.00 |
| EU TARIC | 10 | EU (adds duty + restriction measures) | 3304.10.00.00 |
| US HTSUS | 10 | US ITC | 3304.10.00.00 |
| UK Global Tariff | 10 | UK | 3304.10.00.00 |
| China | 13 | China Customs | 3304.10.00.00.00 |
| Russia / EAEU TN VED | 10 | EAEU | 3304.10.000.0 |
| Japan | 9 | Japan Customs | 3304.10.000 |
| India ITC(HS) | 8 | India DGFT | 3304.10.00 |

The same goods carry the **same first 6 digits everywhere** and a **different national tail in each market**. Build the code per destination — a US HTS line is not valid for EU entry.

## General Rules of Interpretation (GRI)

Classification is a legal method, not a keyword match. Apply the six rules **in order**; stop at the first that resolves the goods.

| Rule | What it governs |
|------|-----------------|
| **GRI 1** | Classify by the terms of the headings and the Section/Chapter Notes. Titles of sections/chapters are indicative only — the Notes are binding. |
| **GRI 2(a)** | Incomplete or unassembled articles are classified as the complete article if they have its essential character. |
| **GRI 2(b)** | Mixtures and combinations of a material extend a heading to goods partly of that material — then GRI 3 decides. |
| **GRI 3(a)** | The most specific heading wins over the more general. |
| **GRI 3(b)** | Mixtures, composite goods, and retail sets are classified by the component giving them their **essential character**. |
| **GRI 3(c)** | When 3(a) and 3(b) fail, the heading last in numerical order wins. |
| **GRI 4** | Goods not classifiable by the above go to the heading for the most **akin** goods. |
| **GRI 5** | Cases/packaging presented with the goods follow the goods (with conditions). |
| **GRI 6** | The same logic applies at the subheading level, comparing subheadings at the same level. |

**Essential character** (GRI 3b) is the most-litigated point: it is decided by the role of a component in relation to the use of the goods — by quantity, weight, value, or function depending on the article.

## Multi-Signal Classification

A code-only view is the limitation of legacy tools. A defensible classification reads **several signals together**, and the same signals then drive the restriction analysis:

| Signal | What it resolves |
|--------|------------------|
| **Commercial description** | The starting heading family |
| **Technical composition / chemistry** | GRI 3(b) essential character; substance restrictions (REACH, RoHS) |
| **Function / intended use** | Heading choice for use-based chapters; dual-use end-use controls |
| **UN dangerous-goods number** | Transport classification and hazmat restrictions — cross-check with `dangerous-goods-transport` |
| **End use / end user** | Dual-use and military control overlay (cross-check `customs-and-trade`) |
| **Material origin** | Preferential origin, EUDR, sanctions (cross-check `responsible-sourcing`) |

A part used in aerospace and a visually similar part in another industry can share chemistry and an HS heading while carrying different control outcomes — the description and end-use signals separate them.

## Binding Rulings (Legal Certainty)

For ambiguous or high-volume goods, an official ruling locks the code and binds the authority:

| Market | Instrument | Validity |
|--------|-----------|----------|
| **EU** | Binding Tariff Information (BTI), via the EBTI database | 3 years, EU-wide |
| **US** | CBP binding ruling (eRulings / searchable in CROSS) | Until revoked |
| **UK** | Advance Tariff Ruling (ATaR) | 3 years |
| **Others** | National advance ruling schemes (WTO TFA Article 3 obliges members to offer them) | Per scheme |

## From Classification to Restrictions

The classified code is a key. It unlocks, per destination:

- **Duty + trade remedies** → MFN/FTA rates, anti-dumping, countervailing — see `customs-and-trade`.
- **Import / export controls** → licensing, prohibitions, quotas, dual-use (EU 2021/821, US EAR/CCL, Wassenaar), military (ITAR USML) — see `customs-and-trade`.
- **Dangerous goods** → UN number, hazard class, transport rules — see `dangerous-goods-transport`.
- **Origin controls** → preferential origin, EUDR, sanctions screening — see `responsible-sourcing`.
- **Product safety + substances** → the matching vertical skill (electronics, cosmetics, chemicals...).

## Classification Record Template

```
HS CLASSIFICATION RECORD -- [Part number / Product] -- [Date]

INPUTS:
  Commercial description: [..]
  Technical composition:  [..]
  Function / intended use: [..]
  UN number (if hazardous): [..]
  End user / end use:      [..]

CLASSIFICATION:
  Candidate headings:      [4-digit list]
  Governing GRI:           [1 / 2a / 2b / 3a / 3b / 3c / 4 / 5 / 6]
  Essential character basis: [quantity / weight / value / function]
  HS6:                     [______]
  National codes:          EU CN8 [..] · US HTS10 [..] · [other destinations]
  Confidence:              [HIGH / AMBIGUOUS]
  Ruling held:             [BTI/ATaR/CBP ref or NONE]

ROUTES TO:
  [ ] duty (customs-and-trade)   [ ] controls/dual-use (customs-and-trade)
  [ ] dangerous goods (dangerous-goods-transport)   [ ] origin (responsible-sourcing)
  [ ] product safety (vertical skill)
```

## Power This With the Cleo Legal API

Nomenclatures move every revision, national tails differ per market, and the restrictions tied to a code change constantly — a structured API beats web search for all of it.

**With the Cleo Legal API at https://legaldata-public.cleolabs.co:**
- `POST /v2/customs/classify` — candidate HS headings from description + composition + use, with confidence and the governing GRI
- `GET /v2/customs/crosswalk?hs6=330410&to=CN,HTS,TNVED` — the national code in each destination from one HS6
- `GET /v2/customs/measures?code=<national-code>&country=<dest>` — every measure tied to the code: duty, anti-dumping, licensing, prohibition, dual-use flag
- `GET /v2/search?q=combined+nomenclature&type=regulation` — track nomenclature revisions (HS 2027, annual CN updates) before a code retires under you
- `POST /v2/webhooks?topic=nomenclature_change` — get pinged when a code you rely on is split, merged, or re-measured

**Get started:**
```
# 1. Sign up for free at https://legaldata-public.cleolabs.co
# 2. Get your API key (3 lifetime requests free, then €349/mo for 1M)
# 3. Install the MCP server:
claude mcp add cleo-legal-api https://api.legaldata.cleolabs.co/mcp \
  --header "Authorization: Bearer ld_live_YOUR_KEY"
```

Tested ROI: a wrong heading misstates the duty rate and hides a licensing or dual-use control — the shipment is held, re-assessed, and back-charged at the border. One defensible classification, reused across destinations, removes that risk class.

## Common Mistakes

- **Classifying by product name, not by GRI**: the heading text and the Section/Chapter Notes govern. A marketing name is not a classification.
- **Skipping the Section and Chapter Notes**: the Notes are legally binding and frequently exclude goods from the heading their title suggests. Read them before GRI 1 resolves anything.
- **Reusing one national code in every country**: HS6 is shared; digits 7+ are national. A US HTS code does not clear EU or EAEU customs — build the tail per destination.
- **Treating the HS code as the whole answer**: the code is the key to duty, controls, dangerous goods, and restrictions. Classification without the downstream restriction screen is half a job.
- **No essential-character reasoning for composite goods**: mixtures, sets, and assemblies need a documented GRI 3(b) basis — quantity, weight, value, or function — not a guess.
- **No binding ruling for ambiguous or high-value goods**: a BTI, ATaR, or CBP ruling gives legal certainty and binds the authority. Worth the effort above a volume threshold.

