Normattiva APInormattiva.it ↗
Search and retrieve Italian legislative acts from Normattiva.it. Filter by year, act type, number, or keyword. Returns full text with article structure preserved.
What is the Normattiva API?
The Normattiva API gives programmatic access to Italy's official legislative database through 4 endpoints covering search, full-text retrieval, and autocomplete. Use search_laws to filter acts by year, act type (LEGGE, DECRETO-LEGGE, DECRETO LEGISLATIVO), act number, or body text, and get_law_full_text to retrieve the complete content of a specific act with its article numbering (Art. 1, Art. 2, etc.) intact.
curl -X GET 'https://api.parse.bot/scraper/083d53e7-2d04-43bf-bac9-652b1dc273ba/search_laws?page=0&year=2026&query=lavoro&number=60&act_type=COS&title_search=lavoro' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace normattiva-it-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.normattiva_italian_law_api import Normattiva, ActType, LawSummary
client = Normattiva()
# Search for laws of type LEGGE from 2026
for law in client.lawsummaries.search(year="2026", act_type=ActType.LEGGE, limit=5):
print(law.official_title, law.publication_date, law.codice_redazionale)
# Navigate to full text from a search result
full = law.details()
print(full.subtitle, full.full_text[:200])
# Simple text search
for result in client.lawsummaries.simple_search(query="lavoro", limit=3):
print(result.official_title, result.gazzetta_ufficiale, result.detail_url)
# Autocomplete suggestions
for suggestion in client.suggestions.list(query="diritto"):
print(suggestion.value, suggestion.label)
Search for Italian laws/acts using advanced filters (year, act type, number, title text, body text). Returns paginated results with 20 items per page. At least one search parameter should be provided. The act_type parameter accepts either the display name (e.g. 'LEGGE') or the internal code (e.g. 'PLE'). Each result includes metadata and identifiers needed to retrieve the full text via get_law_full_text.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| year | string | Year of the act (e.g. '2026') |
| query | string | Text to search in the body of laws |
| number | string | Act number (e.g. '213') |
| act_type | string | Type/denomination of the act. Accepts display name or code. |
| title_search | string | Text to search in the title of laws |
{
"type": "object",
"fields": {
"page": "integer - current page number (0-indexed)",
"results": "array of LawSummary objects",
"per_page": "integer - results per page (always 20)",
"total_count": "integer - total number of matching acts",
"has_next_page": "boolean - whether more pages are available",
"results_on_page": "integer - number of results on this page"
},
"sample": {
"data": {
"page": 0,
"results": [
{
"detail_url": "https://www.normattiva.it/atto/caricaDettaglioAtto?atto.dataPubblicazioneGazzetta=2026-05-27&atto.codiceRedazionale=26G00108&atto.articolo.numero=0&atto.articolo.sottoArticolo=1&atto.articolo.sottoArticolo1=0&qId=",
"description": "Modifica dell'intesa tra il Governo della Repubblica italiana e l'Unione Induista italiana",
"official_title": "LEGGE 7 Maggio 2026, n. 93",
"publication_date": "2026-05-27",
"codice_redazionale": "26G00108",
"gazzetta_ufficiale": "(GU n. 121 del 27-05-2026)"
}
],
"per_page": 20,
"total_count": 46,
"has_next_page": false,
"results_on_page": 20
},
"status": "success"
}
}About the Normattiva API
Search and Filter Italian Legislation
search_laws accepts up to six filter parameters — year, number, act_type, query (body text), title_search, and page — and returns paginated results of 20 items per page. Each result object includes official_title, description, publication_date, gazzetta_ufficiale (the Gazzetta Ufficiale reference), codice_redazionale (a unique act identifier), and a detail_url. The total_count and has_next_page fields let you walk through large result sets. For simpler use cases, search_laws_simple accepts just a query string and returns the same response shape.
Full-Text Retrieval
get_law_full_text takes two required inputs — publication_date (YYYY-MM-DD) and codice_redazionale — both available from search results. It returns official_title, subtitle, publication_date, the act's codice_redazionale, and full_text with article numbering preserved. Acts that have not yet entered into force return a full_text value indicating 'NON ANCORA ESISTENTE O VIGENTE' rather than the article body.
Autocomplete Suggestions
suggest accepts a partial Italian-language query (minimum 3 characters) and returns up to 5 matching terms from the Normattiva corpus. Each suggestion object contains label (HTML-formatted, suitable for display), value (plain text), and name. Terms outside the corpus return an empty list, so this endpoint is most reliable with Italian legal terminology.
Coverage and Identifiers
The codice_redazionale field (example: 26G00036) is the stable identifier for each act and should be used to link search results to full-text retrieval. The gazzetta_ufficiale field provides the original publication reference in the Italian Official Gazette. All act types present on Normattiva — including laws, legislative decrees, and decree-laws — are searchable via the act_type filter.
The Normattiva API is a managed, monitored endpoint for normattiva.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when normattiva.it changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official normattiva.it API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a legal research tool that lets users filter Italian laws by year and act type, then display full article text.
- Monitor newly published decrees by querying
search_lawswith a specificyearandact_typeof 'DECRETO-LEGGE'. - Power an autocomplete search bar for Italian legal terms using the
suggestendpoint. - Cross-reference a specific law number against its Gazzetta Ufficiale publication details returned in search results.
- Ingest full legislative texts into a document store for NLP or semantic search by retrieving
full_textviaget_law_full_text. - Track all legislative acts matching a keyword across multiple years using paginated
search_lawsqueries. - Extract structured act metadata (title, publication date, codice_redazionale) for a compliance or regulatory database.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Normattiva provide an official developer API?+
What identifiers do I need to retrieve the full text of a specific act?+
get_law_full_text requires two fields from search results: publication_date (in YYYY-MM-DD format) and codice_redazionale (e.g., '26G00036'). Both are returned in every result object from search_laws and search_laws_simple. Without both values the full-text endpoint cannot resolve the act.What happens when a law exists in the database but is not yet in force?+
get_law_full_text endpoint still returns a valid response, but the full_text field will contain the string 'NON ANCORA ESISTENTE O VIGENTE' instead of article content. The official_title, subtitle, publication_date, and codice_redazionale fields are still populated.