Open data
Data and API Everything the site shows comes from a public, read-only API at https://api.impactopublico.pt, with no key and no account. Responses use the {data, meta} envelope: records travel in data and provenance — observation instant, official URL, SHA-256 and counts — travels in meta.source.
Coverage status The API publishes official metadata, not conclusions. A value that fails validation is published as null: the projection never guesses. Lists and details use a short public cache with stale-while-revalidate; a malformed request returns 400 and a missing record returns 404.
Calling the API Base address: https://api.impactopublico.pt Open /v1/build in your browser
Every address in the list below hangs off this one, answers to GET and returns JSON. Open one in your browser to see the response, or copy an example and run it as it stands.
In a terminal, with curl:
curl -s "https://api.impactopublico.pt/v1/audit-reports?limit=1"In Python, reading the {data, meta} envelope:
import json
import urllib.request
request = "https://api.impactopublico.pt/v1/audit-reports?limit=3"
with urllib.request.urlopen(request) as response:
body = json.load(response)
for report in body["data"]:
print(report["reportNumber"], "—", report["title"])
print("Source:", body["meta"]["source"]["officialPageUrl"])
print("Licence:", body["meta"]["license"]["id"])The reply to the first command, with long fields shortened to …: the records in data, the official document and the observation instant in meta.source, the reuse terms in meta.license.
{
"data": [
{
"reportNumber": "01/2026",
"title": "Auditoria na área da contratação pública - Município de Marvão",
"publishedAt": "2026-03-30"
}
],
"meta": {
"total": 12,
"source": {
"observedAt": "2026-08-24T12:35:19.498Z",
"officialPageUrl": "https://www.tcontas.pt/…?dset=2026",
"pageSha256": "17c7d7f8dccb75a9…",
"totalRecords": 12
},
"license": {
"id": "CC-BY-4.0",
"url": "https://creativecommons.org/licenses/by/4.0/"
}
}
}Reuse You can reuse what the observatory produces under the Creative Commons Attribution 4.0 International licence (CC BY 4.0): the compilation, the curation, the verified citations, the links between the stages of a policy, the coverage ledgers, the derived counts and the API responses. Copy it, republish it and build on it, commercial use included, as long as you credit the source. Every API response declares these terms in meta.license, next to meta.source.
The licence covers this layer and not the official documents. Diário da República acts, Portal BASE contract records, municipal minutes, European Parliament adopted texts and any passage quoted as the source publishes it belong to the institutions that publish them and keep their own terms.
Attribution line: Source: Impacto Público — impactopublico.pt, CC BY 4.0 Read the full licence text
For questions about reuse, write to contacto [at] impactopublico.pt .
IDENTITY
The published cut: commit, publication instant and repository-derived counts, including the municipal universe.
SOURCES
The latest observation of every source in the public catalogue: operational state, counts, coverage and detected changes.
POLICY FILES
Published policy files; the /v1/policies/:slug detail joins lifecycle, SHA-256 sources, evidence, coverage search and source diversity.
PARLIAMENT
Agenda, open consultations, observed changes, votes and enacted laws for the day.
INITIATIVES
Searchable catalogue of the current legislature's initiatives, with filters and an opaque cursor; detail at /v1/initiatives/:externalId.
PARTIES
Parliamentary groups with per-author counts; profile at /v1/parties/:slug.
DAILY RECORD
The four areas of the daily record, with the number of candidates assessed and the public selection rule.
CONTRACTS
Public contracts from the active Portal BASE version, with search, filters and detail at /v1/contracts/:externalId.
EU FUNDS
Portugal 2030 operations from the active version; official thematic areas at /v1/pt2030/themes .
MUNICIPAL ACCOUNTS
Revenue collected and spending paid per municipality, from the accepted annual DGAL cut.
MUNICIPALITIES
Observed municipal index; per-municipality documents at /v1/municipalities/:slug/documents.
EVALUATIONS
Evaluations from the AD&C catalogue, with each one's official products.
AUDITS
Court of Auditors audit reports in the active version.
CONSULTATIONS
ERSE public consultations, with official documents and dates.
BUDGET
Monthly budget execution; the approved budget at /v1/state-budget and the descriptive comparison at /v1/budget-comparison .
EUROPE
The Portuguese delegation to the European Parliament; adopted texts at /v1/european-adopted-texts .
STATISTICS
Historical windows with and without a published count; counts per family at /v1/statistics/historical?familia=iniciativas and relationships at /v1/statistics/relationships .
RSS
Account-free RSS: the parliamentary day, the daily record at /feed.xml and each policy file at /politicas/:slug/feed.xml.
Access limits and conditions No key and no account. Any read under /v1 answers from any origin, so you can call it from a newsroom notebook, an Observable cell or a chart on your own site. The pace is 120 requests a minute per client. Every response reports what is left in X-RateLimit-Remaining and the seconds until it renews in X-RateLimit-Reset. Past that you get a 429 with Retry-After, and access returns on its own. Account and newsroom routes stay outside this opening. They work with a session and answer only to the site origin. If you publish a figure, keep the commit that /v1/build returns beside it. It identifies the exact cut the figure came from.