Six endpoints turn a free-text product description into a complete customs pack — tariff code, legally required certifications, contractually expected standards, dual-use flags and EAEU parallel-import recognition. Built for industrial importers landing equipment in Kazakhstan, Russia, Belarus, Armenia, Kyrgyzstan — and their counterparts in the EU and beyond.
Most importers stitch this workflow together by emailing 10–15 brokers and picking the most conservative answer. With LegalData you wire it into one call — or six, if you want to surface each step in your own UI.
Importing a centrifugal pump from France to Kazakhstan
Ethan's team imports oil & gas equipment for a Kazakh government tender. Here is the exact flow they would run.
1. Match the product to a TN VED code
/v2/customs/lookup accepts the description in any of 11+ supported languages. We embed it, KNN against the local nomenclature (TN VED in Kazakhstan) and rerank the top results with Haiku.
{
"data": {
"query": "Pompe centrifuge pour pétrole brut",
"detected_lang": "fr",
"candidates": [
{
"code": "8413701000",
"system": "tn_ved",
"country": "KZ",
"hs6_parent": "841370",
"title": {
"fr": "Pompes centrifuges pour liquides pétroliers",
"en": "Centrifugal pumps for petroleum liquids",
"ru": "Насосы центробежные для нефтяных жидкостей"
},
"confidence": 0.92,
"rationale": "Pompes centrifuges pour liquides — usage pétrole couvert par la sous-position 8413.70.10.00."
},
{ "code": "8413810000", "system": "tn_ved", "country": "KZ", "confidence": 0.71, "title": { "en": "Other pumps for liquids" }, "rationale": "Catégorie résiduelle 'autres pompes' — moins spécifique au pétrole." }
]
}
}
2. List obligations for the chosen code
Pass the top candidate to /v2/customs/obligations and we return two buckets — legally required and contractually expected — filtered by ?context=government.
{
"data": {
"code": "8413701000",
"country": "KZ",
"context": "government",
"legally_required": [
{
"type": "certification",
"title": "EAC Declaration of Conformity",
"regulation": "TR CU 010/2011",
"source": "eurasian_economic_commission",
"mandatory": true,
"evidence_required": ["test report from accredited lab", "manufacturer declaration"]
}
],
"contractually_expected": [
{
"type": "standard",
"title": "GOST 17398-72 — Pumps. Terms and definitions",
"source": "gost",
"mandatory": false,
"rationale": "Standard frequently required by KZ government buyers in oil & gas tenders."
}
],
"dual_use_flag": { "applicable": false, "checked": true }
}
}
3. Cross-check dual-use
A centrifugal pump is not on the Wassenaar list — but if the equipment were a mass spectrometer, this is the call that prevents three weeks of customs hold.
{
"data": {
"applicable": true,
"confidence": 0.94,
"regimes": [
{ "regime": "wassenaar", "category": "3A201.a — Mass spectrometers", "entry_id": "wassenaar-3A201-a" },
{ "regime": "eu_dual_use","category": "3A201.a", "annex": "Annex I", "regulation": "Regulation (EU) 2021/821" }
],
"destination_risk": {
"country": "KZ",
"embargoed": false,
"additional_approvals_required": ["KGB Republic of Kazakhstan export control approval"]
},
"recommendation": "Verify with national export control authority before shipment. Allow 4–8 weeks for approval."
}
}
4. Or — one composite call
POST /v2/compliance/check runs all of the above plus parallel-import in one round-trip. Built for a single MCP tool call.
typescript
import { LegalData } from '@cleo-legal/sdk';
const ld = new LegalData({ apiKey: process.env.CLEO_LEGAL_API_KEY! });
const pack = await ld.compliance.check({
product: {
description: 'Pompe centrifuge pour pétrole brut',
lang: 'fr',
intended_use: 'oil pipeline transfer',
},
origin_country: 'FR',
destination_country: 'KZ',
client_type: 'government',
options: { include_alternatives: true, include_dual_use_check: true, include_parallel_import: true },
});
console.log(pack.data.product_classification.primary_code.code);
// → '8413701000'
console.log(pack.advisory_disclaimer);
// ↑ ALWAYS surface this verbatim to your end user
5. Same thing — from Claude Desktop
Install the MCP server and prompt Claude directly.
prompt
> Find the customs obligations for a centrifugal pump exported from France
> to Kazakhstan for a government oil & gas client. Flag any dual-use risk
> and tell me which EAEU countries would recognise the EAC certificate.
Claude will call:
1. compliance_check({ product: …, origin_country: 'FR',
destination_country: 'KZ', client_type: 'government' })
2. (and surface the advisory_disclaimer verbatim before the recommendation)
Languages
Multilingual product descriptions
You don't need to translate before calling /v2/customs/lookup. We auto-detect the input language (Cyrillic, CJK, Latin script heuristics) and translate to English internally before embedding. Pass ?lang= if you want to force a specific input language.
Supported: RU · ZH · JA · KO · EN · FR · DE · ES · IT · NL · PT. The title field in the response is keyed by ISO-639-1 code and ships en at minimum.
Risk · #1 blocker
Dual-use detection (the "spectrometer" case)
A mass spectrometer arrived in customs without an export licence and sat for three weeks. The team had emailed 12 brokers and nobody flagged Wassenaar 3A201. That is the single most expensive failure mode in the workflow — and it's the one this endpoint eliminates.
/v2/customs/dual-use-check cross-checks the Wassenaar Arrangement and EU 2021/821 (with EAR / MTCR / NSG / Australia Group coverage rolling out) and surfaces the matching category, the underlying regulation, and country-level overlays (embargoes, additional national approvals).
response
{
"data": {
"applicable": true,
"confidence": 0.94,
"regimes": [
{ "regime": "wassenaar", "category": "3A201.a — Mass spectrometers", "entry_id": "wassenaar-3A201-a" },
{ "regime": "eu_dual_use","category": "3A201.a", "annex": "Annex I", "regulation": "Regulation (EU) 2021/821" }
],
"destination_risk": {
"country": "KZ",
"embargoed": false,
"additional_approvals_required": ["KGB Republic of Kazakhstan export control approval"]
},
"recommendation": "Verify with national export control authority before shipment. Allow 4–8 weeks for approval."
}
}
Buyer context
Government vs private — GOST is not always mandatory
GOST standards aren't enforced at the EAEU customs line, but government and oil & gas tenders almost always require them in the contract. Pass ?context=government on /v2/customs/obligations and we split the response into two buckets:
contractually_expected — buyer-side standards (GOST, EN, ISO) typical of the requested context. Comes with a rationale so you can justify the inclusion to a tender team.
Sometimes two codes can both apply, and the alternative carries fewer obligations or a lower import duty. We surface those, ranked by feasibility × defensibility, with a naming suggestion that stays factual. Every response carries an advisory_disclaimer— final classification is the importer's legal responsibility.
{
"data": {
"original": { "code": "8413701000", "title": "Centrifugal pumps for oil", "estimated_obligation_count": 6, "import_duty_pct": 5.0 },
"alternatives": [
{
"code": "8413810000",
"title": "Other pumps for liquids",
"delta_obligations": -2,
"delta_duty_pct": -2.5,
"naming_suggestion": "Industrial liquid pump (general purpose)",
"feasibility_score": 0.78,
"defensibility_score": 0.85,
"rationale": "Generic 'other pumps' avoids the oil-classification that triggers TR CU 032 (equipment for explosive environments). 'Industrial liquid pump' is factual and defensible if the product is not exclusively used for oil."
}
]
},
"advisory_disclaimer": "These suggestions are informational only. Final customs classification must be validated by a licensed broker or competent authority. Misclassification carries legal liability."
}
EAEU
One certificate, five countries
Under the Treaty on the EAEU, a certificate validated in one member state (KZ, RU, BY, AM, KG) is generally recognized in the other four. This is the rule that lets you land in Kazakhstan and resell into Russia without re-certifying.
{
"data": {
"originating_country": "KZ",
"valid_in": ["RU", "BY", "AM", "KG"],
"regulation_basis": "Treaty on the EAEU, Article 53",
"exceptions": ["defense-grade equipment requires per-country approval"],
"notes": "EAC declarations are recognized across all 5 EAEU members."
}
}
Live demo
Duty calculator
Look up the import duty, VAT, and excise rate for any HS / TN VED / CN8 / HTS code, by destination country. Backed by the EAEU Common Customs Tariff (KZ, RU, BY, AM, KG), EU TARIC, and US HTSUS. Calls GET /v2/customs/duties through the playground proxy — sign in first, then attach an API key.
Live demo · production APISign in to the playground first to attach an API key — the call is then proxied securely.
Example: code=8413701000, country=KZ — centrifugal oil pumps, duty-free under EAEU CCT + 12% VAT (the Ethan workflow baseline).