Legal Data
AvailableWhich legal document matches the query, and how can its text be retrieved or synchronised?
GET /v2/searchExplore Legal Data Everything you need to discover the data, choose a product surface and ship an integration. Start with a product, then move to the REST reference for exact parameters and response schemas.
See which jurisdictions, authorities and source statuses are actually represented.
Explore coverage →Search, retrieve, classify and monitor through the authenticated v2 API.
Open API reference →Choose the delivery channel that fits your product or AI agent.
Choose a channel →Which legal document matches the query, and how can its text be retrieved or synchronised?
GET /v2/searchExplore Legal Data Which HS code does this product take in this destination on this date, which facts are still missing, and what backs each candidate?
POST /v2/customs/classificationsExplore Customs Classification Which regulations and authorities are candidates for an existing HS6 code in a market?
Design partnerExplore Product Scope The join from a Product Scope candidate to complete legal evidence is not yet guaranteed for every Product Scope result.
Find, retrieve and synchronise legal documents for search, RAG, copilots and regulatory data feeds.
Your product needs to search legal material, retrieve a traceable record and text, or keep its own index in sync.
Document identifiers, titles, jurisdiction data, types, source slugs, stored URLs, excerpts, ranking signals and text when ingested.
GET /v2/search→GET /v2/documents/{id}→GET /v2/documents/{id}/textGET /v2/documents→GET /v2/changesAngle-bracket values describe types or omitted values; these are shortened shapes, not literal responses. Scores and counts are numbers; nullable fields may be null.
A product title is rarely enough to classify. Turn it into an HS code for a destination and a date: the API asks for the missing facts instead of guessing, returns the national line and HS6 separately, quotes the notes behind each candidate with a rationale when available, and keeps a dossier on request.
POST /v2/customs/classifications→GET /v2/customs/classifications/{id}/dossierPOST /v2/customs/classification-batches→GET /v2/customs/classification-batches/{job_id}/items.csvGET /v2/customs/codes/validateGET /v2/customs/codes/changesGET /v2/customs/coverage/countriesGET /v2/customs/lookupAngle-bracket values describe types or omitted values; these are shortened shapes, not literal responses. Scores and counts are numbers; nullable fields may be null.
status, confidence and ambiguous to route uncertain results to a licensed customs broker or the competent authority, with the dossier attached.GET /v2/customs/dutiesDestination-specific pilot
POST /v2/customs/landed-costConditional estimate with completeness fields
GET /v2/customs/obligationsAssisted beta
GET /v2/customs/dual-usePreliminary screening only
POST /v2/compliance/check combines classification and selected Customs checks. It is not Product Scope or Marketplace Gate.
Identify candidate regulations and authorities for a product in a target market.
GET /v2/catalog/regulations-by-hshs6 · requiredmarket · requiredcontext · optionalThe building block requires an existing HS6 code and market. It does not classify a product description by itself.
Candidate regulation labels and authorities, not a complete applicability decision or evidence pack.
Complete legal evidence, applicability conditions, official URLs, versions and effective dates are not yet returned for every line. source: "deterministic" describes the mapping method, not legal provenance.
Angle-bracket values describe types or omitted values; these are shortened shapes, not literal responses. Scores and counts are numbers; nullable fields may be null.
The future product will return a listing decision such as approve, review or block, with reasons and missing evidence.
401 means the API key is missing or invalid.coverage_status: "not_seeded" means Cleo has no applicable data row; it does not mean the rate is zero.ambiguous: true means the classification needs review.total_is_partial: true or a null landed-cost total must not be presented as complete.