Give your agent a source it can cite.
Search regulations, retrieve documents and articles, inspect changes and keep the source URL with the answer. Built for legal research, RAG and compliance workflows.
Legal and customs data your product can query, explain and cite, with the source, jurisdiction and document status attached to every answer. Start with the API that matches your workflow, then move from prototype to production without changing the data contract.
"The data subject shall have the right to obtain from the controller the erasure of personal data concerning him or her without undue delay…"
Sources, jurisdictions, authorities and document counts are published live by GET /v2/coverage and GET /v2/atlas/stats.
Each product below describes what is available today, where it fits, and which documentation to open next.
Search regulations, retrieve documents and articles, inspect changes and keep the source URL with the answer. Built for legal research, RAG and compliance workflows.
Classify products, resolve duties, calculate landed cost and screen dual-use signals. Responses expose the resolution and provenance so teams can see what is seeded, derived or still missing.
Use authenticated REST for your backend, the TypeScript SDK for product code, MCP for Claude and Cursor, and webhooks when your index needs to stay current.
We do the boring part — finding the law, parsing it, keeping it current. You get a clean answer with a link your agent can quote.
Natural-language query, jurisdiction filter, or direct identifier. One endpoint covers all.
GET /v2/search?q=…Title, source, jurisdiction, publisher URL and full text, with a content hash to detect changes.
application/jsonEach result carries the publisher URL and a stable document id. GET /v2/changes lists updated documents, and a webhook can notify you.
GET /v2/documents/{id}One line to install, one call to query. Works inside your agent, your search pipeline, or a plain backend. Native plug-in for Claude Desktop and Cursor.
Read the docs →// npm install https://github.com/Cleo-Labs-IA/cleo-customs-examples/releases/download/sdk-v0.9.0/cleo-legal-sdk-0.9.0.tgz
import { LegalData } from "@cleo-legal/sdk";
// Cite GDPR Article 17 in your agent
const ld = new LegalData({ apiKey: process.env.CLEO_API_KEY! });
const r = await ld.search({ q: "GDPR right to erasure", country: "EU" });One API. Three persona-shaped entrances depending on what you're building.
When your agent says "according to GDPR…", it'll actually be right. Verifiable, current, linked to the source.
For AI builders →Cross-jurisdiction search, version tracking, structured metadata. Replace 4 vendors with one schema.
For legal teams →HS-code lookup, dual-use checks, landed cost, sanctions. EAEU-deep, EU-wide, US-current.
For trade teams →Eight featured below. GET /v2/coverage lists every source with its jurisdiction, document count and date of last check.
A Sandbox with 200 units and no card to see if it fits. Then a single monthly price — no per-seat games, no hidden quotas.
Test real API requests before you pay anything.
For a live product integration.
For higher-volume production workloads.
One call is one unit. A few endpoints, such as customs classification of a kit or a catalog batch, weigh more — see request weight.
Running more than 1,000,000 calls a month? Get in touch →
No. Cleo Legal returns regulatory data with a link to the publisher: EUR-Lex, Legifrance, the BOE and every other source listed live in GET /v2/coverage. Every compliance endpoint carries an explicit disclaimer. It's data, not advice.
Each source shows the date of its last check in GET /v2/coverage, so you can see how recent every source is before you integrate.
EU and member states are deepest. Strong on UK, US federal, Switzerland, Japan, and EAEU. GET /v2/coverage lists every jurisdiction with its document count, updated live.
Yes. We ship a TypeScript SDK, REST, and a Claude/Cursor plug-in.
Past your monthly quota, the API returns a 402 until the quota resets on the 1st of the month (UTC), or until you upgrade from the dashboard. When the Sandbox lifetime units run out, the API also returns a 402, and a paid plan picks up from there. Past the per-minute limit, it returns a 429 with a Retry-After header. We never auto-charge for overage.