European Union API: Search EU law
Searches EUR-Lex legal acts by topic, ranked by the site's relevance, filtered by document type, year of adoption and in-force status. Short names and ELI links are included when shown in the results.
Unofficial. Not affiliated with or endorsed by European Union.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Year optional
year Year the document was adopted, for example 2024.
Not set
Whole number from 1950 to 2100.
- Query, required
query Words describing the EU law topic, for example packaging waste.
artificial intelligence
- Max Results optional
max_results Maximum laws to return, for example 20 (up to 100).
20 (default)
Whole number from 1 to 100.
- Document Type optional
document_type Type of law to include, for example regulation.
any (default)
One of
any,regulation,directive,decision.- In Force Only optional
in_force_only Return only laws currently in force, for example yes.
yes (default)
One of
yes,no.
Input as JSON
{ "query": "artificial intelligence"}Output
{ "laws": [ { "link": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689" , "title": "Regulation (EU) 2024/1689 of the European Parliament and of the Council of 13 June 2024 laying down harmonised rules on artificial intelligence and amending Regulations (EC) No 300/2008, (EU) No 167/2013, (EU) No 168/2013, (EU) 2018/858, (EU) 2018/1139 and (EU) 2019/2144 and Directives 2014/90/EU, (…" , "eli_link": "http://data.europa.eu/eli/reg/2024/1689/oj" , "in_force": "yes", "short_name": "Artificial Intelligence Act", "celex_number": "32024R1689", "document_date": "2024-06-13", "document_type": "Regulation", "document_number": "Regulation (EU) 2024/1689" , "author_institution": "European Parliament, Council of the European Union" }, { "link": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32021R0694" , "title": "Regulation (EU) 2021/694 of the European Parliament and of the Council of 29 April 2021 establishing the Digital Europe Programme and repealing Decision (EU) 2015/2240 (Text with EEA relevance)" , "eli_link": null, "in_force": "yes", "short_name": null, "celex_number": "32021R0694", "document_date": "2021-04-29", "document_type": "Regulation", "document_number": "Regulation (EU) 2021/694" , "author_institution": "European Parliament, Council of the European Union" }, { "link": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32025R0038" , "title": "Regulation (EU) 2025/38 of the European Parliament and of the Council of 19 December 2024 laying down measures to strengthen solidarity and capacities in the Union to detect, prepare for and respond to cyber threats and incidents and amending Regulation (EU) 2021/694 (Cyber Solidarity Act)" , "eli_link": "http://data.europa.eu/eli/reg/2025/38/oj" , "in_force": "yes", "short_name": "Cyber Solidarity Act", "celex_number": "32025R0038", "document_date": "2024-12-19", "document_type": "Regulation", "document_number": "Regulation (EU) 2025/38" , "author_institution": "European Parliament, Council of the European Union" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"eur-lex.europa.eu/search_eu_law","input":{"query":"artificial intelligence"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "eur-lex.europa.eu/search_eu_law" , "input": { "query": "artificial intelligence" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "eur-lex.europa.eu/search_eu_law" , "input": { "query": "artificial intelligence" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run eur-lex.europa.eu/search_eu_law# with {"query":"artificial intelligence"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "year": { "type": "integer", "maximum": 2100, "minimum": 1950, "description": "Year the document was adopted, for example 2024." }, "query": { "type": "string", "minLength": 1, "description": "Words describing the EU law topic, for example packaging waste." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum laws to return, for example 20 (up to 100).", "x-fous-developer": true }, "document_type": { "enum": [ "any", "regulation", "directive", "decision" ], "type": "string", "default": "any", "description": "Type of law to include, for example regulation." }, "in_force_only": { "enum": [ "yes", "no" ], "type": "string", "default": "yes", "description": "Return only laws currently in force, for example yes." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "laws" ], "properties": { "laws": { "type": "array", "items": { "type": "object", "required": [ "title", "short_name", "document_type", "document_number", "document_date", "in_force", "author_institution", "link", "celex_number", "eli_link" ], "properties": { "link": { "type": "string" }, "title": { "type": "string" }, "eli_link": { "type": [ "string", "null" ], "x-fous-developer": true }, "in_force": { "enum": [ "yes", "no", null ], "type": [ "string", "null" ] }, "short_name": { "type": [ "string", "null" ] }, "celex_number": { "type": "string", "x-fous-developer": true }, "document_date": { "type": [ "string", "null" ], "format": "date" }, "document_type": { "type": "string" }, "document_number": { "type": [ "string", "null" ] }, "author_institution": { "type": [ "string", "null" ] } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
eur-lex.europa.eu/search_eu_law- Returns
- title, short name, document type and number, date, in-force status, author, link, CELEX number, ELI link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method eur-lex.europa.eu/search_eu_law with the inputs above.
Ask your agent
- Find EU directives on packaging waste that are currently in force
- Which regulations did the EU adopt in 2024 about artificial intelligence? I need their CELEX numbers and ELI links.
- Search EUR-Lex for decisions from 2019 on fisheries quotas in the Baltic Sea, including ones no longer in force
- List up to 50 EU laws on data protection and privacy, any type, with short names and dates
- What EU legislation currently applies to batteries recycling? Show results from europa.eu with in-force status and author.
See more
All European Union methodsGets the official text and key dates of one article of an EU regulation or directive from EUR-Lex, in the latest consolidated version when there is one, in any official EU language.
eur-lex.europa.eu/get_law_articleFinds published EU contract award notices on Tenders Electronic Daily by contract topic or winning company, newest publication first, optionally limited to a buyer country and a start date. Values and tender counts are included when published; counts across lots are summed.
ted.europa.eu/search_contract_awardsFinds recently published EU procurement notices matching what is being bought, with buyer, estimated value, submission deadline and TED notice link. Open-only results must have a future submission deadline.
ted.europa.eu/search_tendersLooks up an official Eurostat statistic for an EU or EEA country and the EU27 figure for the same period. Quarterly and half-yearly series return the reporting period that contains a requested month.
ec.europa.eu/get_statisticReturns the ECB's current deposit facility, main refinancing operations and marginal lending facility rates with their effective date. Optionally includes earlier rate changes, newest first.
ecb.europa.eu/get_key_interest_ratesChecks an EU VAT number in the European Commission's VIES service and returns whether it is valid, with the registered name and address when the country makes them available.
ec.europa.eu/validate_vat_numberGets the official ECB euro reference exchange rates for a day, or the latest published day. Weekends, holidays and dates before publication return the previous published day.
ecb.europa.eu/get_euro_exchange_ratesConverts an amount between currencies using ECB euro reference rates, including euro and cross-currency conversions. Uses the latest preceding published rate when the date has none.
ecb.europa.eu/convert_currency