You're viewing the reference. To execute live calls you need a Brubru API key: Start a Professional trial · or contact sales
Brubru EU Data API · v2 · 985 endpoints across 89 EU institution folders

The EU, structured.

Brubru is a vertical EU data provider. Our REST API gives developers, RegTech platforms, public-affairs teams, and AI agents programmatic access to 8,710 adopted EU laws (28,513 OJ publications), 2,080 legislative files tracked from proposal to adoption, 16,521 EU officials, every MEP, 58,399 EP amendments, the Parliament / Council / European Council / Eurogroup / Commission registers, the European Central Bank and the EU financial institutions, the decentralised EU agencies (medicines, food safety, environment, chemicals, drugs, fundamental rights and more), EU funding and tenders, open data including 12 curated Eurostat sport + fitness-relevant health datasets served live, the 19 funding-application templates behind Brubru's Tender Docs product, and Brubru's own proprietary EU intelligence. The same data we use internally is what you call. Brubru is the first customer of its own API.

One surface, one key. The API is organised the way the EU is: one folder per institution or body, 88 folders in total, 966 endpoints. Browse the folders below, or open the full, always-current API reference →: every deployed endpoint, rendered live from the OpenAPI spec.

New to APIs? An API is a way for your software to talk to Brubru's software over the internet. You send an HTTP request (like a web browser does), we send back JSON (structured data). The rest of these docs explain how.

What you get

Every folder maps to one EU institution or body. The counts are exact and update as the API grows.

Legislation (1 folder)

European Parliament (1 folder)

Council & summits (3 folders)

European Commission (1 folder)

Economic & financial (3 folders)

EU agencies (18 folders)

Funding & consultations (2 folders)

Predictions, calendar & registers (3 folders)

Open data & people (4 folders)

Proprietary intelligence (1 folder, 2 sub-routers)

Data sources & refresh cadence

The whole v2 surface is re-synced daily (a 10:00 / 15:00 / 21:00 UTC sweep). The underlying EU sources behind each folder refresh on the cadences below.

Refresh cadenceWhat it covers
Every 6 hoursAdopted laws, legislative procedures, plenary texts & votes, the Commission Register, institutional press releases, the calendar
Every 12 hoursCommittee work items, amendments, reports, EPRS research, Council documents, webstreams
DailyConsultations, parliamentary questions, comitology, sanctions, trade-defence measures, TRIS notifications, tenders, infringements, funding calls; plus the ECB, EU financial institutions, ESM, the 18 decentralised agencies, open data and general publications
WeeklyGeographical indications, Commissioner agendas, RSB opinions, EPRS / STOA / JRC research, EU-funded projects
MonthlyEU officials and departments (the Who Is Who bulk re-ingest)
Live (real-time)MEP profiles, DG COMP competition cases, the Combined Nomenclature, the legal-text and citation resolvers
On publishThe Brubru proprietary layer: knowledge guides, EU Canon deep-dives, Catalan translations, Tender Docs funding-application templates

Authentication at a glance

Every /api/v2/* call requires an API key passed either as a Bearer token or an X-API-Key header:

curl -H "Authorization: Bearer brubru_live_..." \
  "https://brubru.beresol.eu/api/v2/legislative/eur-lex/laws?q=artificial+intelligence&limit=5"

Full details on Authentication.

Response envelope at a glance

Every paginated endpoint returns the same shape. Code once against this envelope and swap datasets by changing the path:

{
  "total": 139,
  "returned": 20,
  "pages": 7,
  "page": 1,
  "limit": 50,
  "has_more": true,
  "next_page": 2,
  "remaining_pages": 6,
  "coverage_complete": true,
  "published_from": "2026-01-01",
  "published_to": "2026-01-31",
  "published_end": "2026-01-31",
  "detail_level": "Full",
  "data": [ ... ]
}

Provenance and rate-limit info live on response headers, not in the body:

X-Powered-By: Brubru
X-Source: brubru.beresol.eu
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Tier: free

Full details on Response envelope.

Quickstart: your first call

1. Get an API key. Email hello@beresol.eu once you're on the Professional subscription. Keys look like brubru_live_ followed by 48 hex characters.

2. Check the service is up. The health check is public: no key required:

curl "https://brubru.beresol.eu/health"

Response:

{
  "status": "ok",
  "service": "brubru-data-provider",
  "time": "2026-04-20T15:00:00Z"
}

3. Try a real search.

curl -H "Authorization: Bearer $BRUBRU_API_KEY" \
  "https://brubru.beresol.eu/api/v2/legislative/eur-lex/laws?q=artificial+intelligence&limit=3"

You get a paginated list of EU laws matching "artificial intelligence", with CELEX identifiers, titles, dates, and EUR-Lex URLs. From there every other endpoint follows the same envelope pattern: just change the path.

Limitations (what we don't cover)

Client libraries

Two official Python libraries wrap the API and its EuroVoc classifier so you are one import away. Both are on PyPI and open source (MIT) at github.com/Beresol-BV/brubru-EU-scraper-library.

pip install brubru
pip install "brubru-eurovoc[local]"   # [local] adds the classifier model

brubru: a thin Python SDK over the v2 API. Typed objects over the 5-datapoint contract, automatic pagination, honest errors. The API's own client.

import brubru

bru = brubru.Client(api_key="brubru_live_...")

# Extract structured items from any EU URL, tagged with EuroVoc
items = bru.extract("https://cinea.ec.europa.eu/news_en", classify=True)

# Recent posts from a mapped entity (MEP, Commissioner, institution, journalist)
posts = bru.social.posts(entity_type="commissioner", platform="x")

eurovoc (PyPI distribution brubru-eurovoc, import name eurovoc): a standalone, open-source EuroVoc classifier. It tags any text into the EU's official subject space (7,029 descriptors, 127 microthesauri, 21 domains), multilingual including Catalan. A modern successor to the 2021 PyEuroVoc package, and the natural home for a retrained long-context model.

import eurovoc

eurovoc.classify("Markets in crypto-assets regulation")
# -> [{"descriptor": "financial instrument", "mt": "2426", "domain": "24", "score": 0.88}, ...]

# or classify a live EU URL through the hosted engine (needs the brubru SDK)
eurovoc.classify_url("https://environment.ec.europa.eu/news_en", api_key="brubru_live_...")

PyPI is the canonical install. Direct downloads are also available for offline use:

Where to go next