Cross-border compliance,
one defensible answer.
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.
The compliance workflow
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.
GET /v2/customs/lookupFree-text product description (any language) → top HS / TN VED candidates with confidence + rationale.
GET /v2/customs/obligationsFor each candidate code, fetch the legal and contractually-expected obligations, split by buyer context (gov / private / oil_gas / …).
GET /v2/customs/dual-use-checkCross-check Wassenaar + EU 2021/821 before shipment — this is what blocks the 3-week spectrometer scenario.
GET /v2/customs/alternativesNet-new: defensible alternative classifications ranked by feasibility × defensibility, with naming guidance. Carries advisory_disclaimer.
POST /v2/compliance/checkRun all of the above in one round-trip — built to be wired as a single MCP tool call. Quota cost = 5 units.
GET /v2/eaeu/parallel-importIf you land in one EAEU member state, check which of the other four (RU, BY, AM, KG) recognize the certificate automatically.
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.
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.
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.
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.
5. Same thing — from Claude Desktop
Install the MCP server and prompt Claude directly.
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.
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).
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:
- legally_required — enforced by customs (EAC, TR CU, import licences, dual-use authorisations).
- 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.
Supported contexts: government · private · defense · oil_gas · mining · aviation · retail · healthcare.
Lighter codes, same legality
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.
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.
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.
Example: code=8413701000, country=KZ — centrifugal oil pumps, duty-free under EAEU CCT + 12% VAT (the Ethan workflow baseline).
Tariff-rate history
Rates change. To see how a code's duty / VAT / excise moved over time, call GET /v2/customs/rates/history?code=&country=&since= for one code, or GET /v2/customs/rates/by-year?country=&year= for everything that changed in a country in a given year. Both return dated RateChange rows and carry the same advisory disclaimer as the duty lookup — confirm current rates with a licensed broker or the competent customs authority before relying on them.
curl -H "Authorization: Bearer ld_live_…" \ "https://api.legaldata.cleolabs.co/v2/customs/rates/history?code=8413&country=KZ&since=2024-01-01"
See the customs reference for the full response schema.