The EU customs tariff as an API and MCP server
Describe a product, get the CN code and its import duties. One key for REST and MCP.
Free: 30 AI units a day, no credit card
Or add it to your AI in one click
$ curl https://hscode.info/api/v1/classify \ -H "Authorization: Bearer $HSCODE_KEY" \ --json '{"mode":"accurate","text":""}'
- CN code
- 6109 10 00 10
- high confidence
- Duty · Viet Nam
- 12 % 0 %
- Decision 0753/20
- On a €10,000 shipment
- €0
- saves €1,200
- Official EU data European Commission TARIC
- HTTPS only Encrypted in transit
- Cloudflare network ISO 27001 · SOC 2 infrastructure
- Hashed API keys Shown once, revocable
- OAuth 2.1 Sign-in for AI agents
- Private by default Descriptions not saved
- declarable CN codes
- 16,742
- declarable CN codes
- yearly snapshots since 2016
- 11
- yearly snapshots since 2016
- languages: DE, EN, FR
- 3
- languages: DE, EN, FR
- test queries right first time
- 9 of 10
- test queries right first time
Source: European Commission TARIC data. Accuracy from 10 sample queries with Precise AI.
What it replaces
First CN code in five minutes
-
1. Sign in
Email link, no password.
-
2. Create a key
Account › API keys.
-
3. Call the API
Send the key as a Bearer token.
One call, description to code
Any language in, the top 5 codes out, each with its path and import duties.
- HTTPS only
- Keys stored hashed and shown once
- One key per app, up to 10, revocable any time
- Every duty with its legal base
curl -X POST https://hscode.info/api/v1/classify \
-H "Authorization: Bearer $HSCODE_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "frozen shrimp, peeled", "mode": "accurate"}'{
"snapshot": "2026-10",
"mode": "accurate",
"reranked": true,
"results": [
{
"goods_code": "0306179290",
"description": "Other",
"path": ["FISH AND CRUSTACEANS, …", "Crustaceans, …", "Frozen",
"Other shrimps and prawns", "Shrimps of the genus Penaeus", "Other"],
"confidence": 0.78,
"reasoning": "Frozen peeled shrimp of the genus Penaeus is most likely classified as frozen other shrimps and prawns under 0306 …",
"duties": [
{
"origin": "ERGA OMNES",
"duty": "12.000 %",
"measure_type": "Third country duty",
"legal_base": "Regulation 1006/11"
}
]
}
],
"disclaimer": "Advisory result generated automatically from the EU TARIC nomenclature. It is not a Binding Tariff Information (BTI) decision; verify the classification before declaring goods."
}Endpoints
Versioned under /api/v1.
| Endpoint | Returns | Counts as |
|---|---|---|
| POST/api/v1/classify | Top 5 codes for a description, with duties | 1 AI unit (fast) or 5 (accurate) |
| GET/api/v1/{lang}/{year}/codes/{code} | One code with hierarchy and duties | Lookup |
| GET/api/v1/{lang}/{year}/search?q= | Search codes and descriptions | Lookup |
| GET/api/v1/{year}/duties/{code} | Import duties of a code | Lookup |
| GET/api/v1/{lang}/{year}/chapters | Chapter list | Lookup |
| GET/api/v1/{lang}/{year}/chapters/{chapter} | All rows of a chapter | Lookup |
| GET/api/v1/snapshots | Languages and yearly snapshots | Lookup |