66 official sources · 50+ jurisdictions

Legal data, instantly.

Search and retrieve regulations, statutes, and sanctions from the GDPR to Japan's APPI. One API. 1,479 open legal sources, refreshed every 6 hours.

Use it from anywhere

In your AI agent. In your code. In your terminal.

Same Bearer token, three integration surfaces. Pick the one that matches how your team actually works — and switch later without rewriting anything.

For Claude

Connect Claude Desktop or Claude Code over SSE — 10 tools, every /v2 endpoint, multilingual search, translation. No glue code.

claude mcp add --transport sse \
  cleo-legal https://api.legaldata.cleolabs.co/mcp/sse \
  --header "Authorization: Bearer ld_live_…"
Install MCP →

For Node / Bun / Workers

Typed SDK with built-in async iterators for pagination and zero runtime dependencies. Works everywhere a fetch exists.

npm install @cleo-legal/sdk
import { LegalData } from '@cleo-legal/sdk';
const ld = new LegalData({ apiKey });
View on npm →

For any HTTP client

Plain REST under /v2/*. JSON in, JSON out. Edge-cached document reads with ETag revalidation. Works from cURL, Python, Go, Postman.

curl -H "Authorization: Bearer ld_live_…" \
  "https://api.legaldata.cleolabs.co/v2/search?q=GDPR&country=EU"
Read API reference →
Quick start

Three lines, one regulation.

curl -H "Authorization: Bearer ld_live_xxx" \
  "https://api.legaldata.cleolabs.co/v2/search?q=GDPR&country=EU&limit=3"
Built for international compliance

Search in 11 languages. Match across all of them.

Multilingual embeddings — query in Russian, surface English documents. Restrict by language with ?lang=. Translate product descriptions with domain-aware prompts via /v2/translate.

EnglishFrançaisDeutschEspañolItalianoPortuguêsNederlandsРусский中文日本語한국어
RU query → EN docs
curl -H "Authorization: Bearer ld_live_…" \
  "https://api.legaldata.cleolabs.co/v2/search?q=насос+центробежный&country=KZ"
# → returns EU technical regs + EAEU GOST in any language
Translate with domain
curl -X POST -H "Authorization: Bearer ld_live_…" \
  -d '{"text":"Насос","target_lang":"en","domain":"customs"}' \
  "https://api.legaldata.cleolabs.co/v2/translate"
# → {"translated":"Centrifugal pump", ...}
Built for scale

25 queries. One round-trip.

Triage a batch of SKUs, ingest a fleet of contracts, or warm a RAG index — bulk endpoints run your queries in parallel and return results in input order. Per-item errors are inline; a single bad query never fails the whole batch.

POST /v2/search/bulk
curl -X POST -H "Authorization: Bearer ld_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": [
      { "q": "centrifugal pump",   "country": "KZ", "lang": "ru" },
      { "q": "spectrometer",       "country": "KZ", "context": "defense" },
      { "q": "industrial freezer", "country": "RU" }
    ]
  }' \
  "https://api.legaldata.cleolabs.co/v2/search/bulk"

Quota: 1 bulk call = N units (one per query). Pro plan ships 1,000,000 units / month, plenty for triaging tens of thousands of SKUs.

Developer SDK

Use the API in 3 lines of TypeScript

Official SDK with full types, async iterators for pagination, native fetch — zero runtime dependencies.

Install

npm install @cleo-legal/sdk

Available on npm: @cleo-legal/sdk

Quickstart

import { LegalData } from '@cleo-legal/sdk';

const ld = new LegalData({
  apiKey: process.env.CLEO_LEGAL_API_KEY!,
});

const results = await ld.search({
  q: 'GDPR', country: 'EU', limit: 5,
});

Works in Node 18+, Bun, Deno, Cloudflare Workers. ESM. Strict TypeScript types.

Customs Intelligence

Built for cross-border trade.

Match products to customs codes, detect dual-use risks, and split obligations by client type — across 100+ jurisdictions, including the EAEU (Kazakhstan, Russia, Belarus, Armenia, Kyrgyzstan).

GET /v2/customs/lookup

Customs Code Matching

Describe a product in any of 11+ languages. Get the right HS or TN VED code in 200 ms, ranked by confidence with multilingual titles and a rationale.

GET /v2/customs/dual-use-check

Dual-Use Detection

Built-in Wassenaar + EU 2021/821 cross-check (with EAR, MTCR, NSG, Australia Group rolling out). Don’t ship a 3-week-blocked spectrometer.

GET /v2/customs/obligations

Project Context

Government vs private buyer? GOST mandatory vs contractually expected? We split the obligations for you across 8 buyer contexts.

One call, full pack

POST /v2/compliance/check

Classify the product, list obligations split by buyer context, cross-check dual-use, surface defensible alternatives and check EAEU parallel-import recognition — in one round-trip, p50 around 3 seconds.

  • 5 quota units per call — Pro includes 1M units / month.
  • Always returns advisory_disclaimer — surface it verbatim to your end user.
  • Wired as a single MCP tool call — install once in Claude Desktop or Claude Code.
curl -X POST \
  -H "Authorization: Bearer ld_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "product": {
      "description": "Pompe centrifuge pour pétrole brut",
      "lang": "fr"
    },
    "origin_country": "FR",
    "destination_country": "KZ",
    "client_type": "government",
    "options": {
      "include_alternatives": true,
      "include_dual_use_check": true,
      "include_parallel_import": true
    }
  }' \
  "https://api.legaldata.cleolabs.co/v2/compliance/check"
Pricing

Simple, transparent.

Free
€0/ month

No credit card. Instant API key.

  • 3 lifetime requests
  • All endpoints
  • Community support
Sign up free
Recommended
Pro
€349/ month

1M requests included · ≈ €0.00035 each.

  • 1,000,000 requests / month
  • 300 req/min burst
  • All endpoints
  • Email support (24h)
  • Cancel anytime
Start Pro

Need more than 1M req/month? Talk to us →

Frequently asked

Questions, answered.

Where does the data come from?
Direct from 66 official regulatory sources — Eur-Lex, Legifrance, gov.uk, eCFR, BaFin, ICO, and 60+ others. No third-party aggregators.
How fresh is it?
Refreshed every 6 hours for legislation, hourly for sanctions and recalls. Each document carries a content_hash so you can detect changes.
Can I use this in production?
Yes. Pro includes 1M req/month and 300 req/min burst. Contact sales for higher volume.
Can I use Cleo from Claude Desktop or Claude Code?
Yes — we ship a built-in MCP server. Install in one command from Claude Code or paste a snippet into Claude Desktop’s config and you immediately get 10 tools mapped to every /v2 endpoint. See the MCP installation guide for details.
What languages are supported for search?
Documents are ingested across 100+ jurisdictions. Queries work in 11+ languages out of the box (RU, ZH, EN, FR, DE, ES, IT, NL, PT, JA, KO) — multilingual embeddings mean a Russian query can still surface English documents. Pass ?lang= to restrict, or POST /v2/translate to translate between languages with a domain-aware prompt.
How does bulk pricing work?
1 bulk call = N units, where N is the number of queries (POST /v2/search/bulk, ≤25) or document ids (POST /v2/documents/bulk, ≤50). The Pro plan ships 1,000,000 units per month — enough to triage tens of thousands of SKUs.
Do you offer SLAs?
Best-effort uptime today. Formal SLAs available on Enterprise — contact sales@cleolabs.co.
What about GDPR and the AI Act?
All data is public regulatory text. No PII processed. DPA available on request.