Discovery & Exploration

Explore what's available: countries, sources, courts, filters, and statistics.

GET /v1/discover/countries

GET /v1/discover/countries

List all countries with document counts by type. No parameters required.

{
  "countries": [
    {
      "code": "FR",
      "case_law_sources": 3,
      "legislation_sources": 1,
      "doctrine_sources": 1,
      "total_documents": 1850000
    },
    {
      "code": "DE",
      "case_law_sources": 2,
      "legislation_sources": 1,
      "total_documents": 920000
    }
  ]
}

GET /v1/discover/countries/{code}/sources

GET /v1/discover/countries/{code}/sources

List all data sources for a specific country.

ParameterInDescription
codepathISO country code (e.g. FR, DE, EU)

Response Fields

FieldTypeDescription
source_idstringUnique source identifier (e.g. FR/Judilibre)
data_typestringcase_law, legislation, or doctrine
court_namestringCourt or institution name
tiernumberQuality tier (1 = highest)
document_countnumberTotal documents in this source
date_rangeobject{min, max} date strings
notesstringAdditional notes about the source

Example: GET /v1/discover/countries/FR/sources

{
  "sources": [
    {
      "source_id": "FR/Judilibre",
      "data_type": "case_law",
      "court_name": "Cour de cassation",
      "tier": 1,
      "document_count": 520000,
      "date_range": {"min": "1790-01-01", "max": "2026-04-01"},
      "notes": "Cour de cassation and cours d'appel decisions"
    }
  ]
}

GET /v1/discover/sources/{source}/filters

GET /v1/discover/sources/{source}/filters

Get the available filter values for a specific source. Use these to build precise search queries.

ParameterInDescription
sourcepathSource identifier (e.g. FR/Judilibre)

FilterOptions Response

FieldTypeDescription
courts[]string[]Available court names
jurisdictions[]string[]Jurisdiction values
chambers[]string[]Court chambers
decision_types[]string[]Types of decisions
languages[]string[]Available languages
court_tiers[]number[]Tier levels (1–3)
subdivisions[]string[]Court subdivisions
date_rangeobject{min, max} date strings

GET /v1/discover/courts

GET /v1/discover/courts

List all courts with document counts. Optionally filter by country or source.

ParameterInDefaultDescription
countryqueryISO country code to filter by
sourcequerySource identifier to filter by
{
  "courts": [
    {"court": "Cour de cassation", "count": 520000},
    {"court": "Bundesgerichtshof", "count": 185000},
    {"court": "Court of Justice of the EU", "count": 42000}
  ]
}

GET /v1/stats

GET /v1/stats

Global statistics across the entire dataset. No parameters required.

{
  "legislation_total": 245000,
  "case_law_total": 3200000,
  "doctrine_total": 18000,
  "total": 3463000,
  "countries": 28,
  "sources": 47,
  "pinecone_vectors": 3463000
}

GET /v1/manifest

GET /v1/manifest

Returns the full pre-computed manifest with stats, countries, sources by country, courts by country, and build timestamp.

The manifest is built at startup in a background thread. If the server just started, this endpoint may return {"loading": true} until the manifest is ready (typically a few seconds).

{
  "stats": { ... },
  "countries": [ ... ],
  "sources_by_country": { "FR": [...], "DE": [...] },
  "courts_by_country": { "FR": [...], "DE": [...] },
  "built_at": "2026-04-04T10:30:00Z"
}

Recommended Exploration Flow

Follow this sequence to discover available data and build targeted search queries.

1
List countries
GET /v1/discover/countries
2
Pick a country and list its sources
GET /v1/discover/countries/FR/sources
3
Check available filters for a source
GET /v1/discover/sources/FR/Judilibre/filters
4
Search with filters applied
POST /v1/search — with country and filters from step 3
Next: API Keys →