API documentation
Base path /v1. JSON, UTF-8. The version is in the path; breaking changes will require /v2.
Authenticate with Authorization: Bearer acta_.... Keys are issued by hand — there is no signup. Below, $ACTA_KEY is your token.
Every act and segment response includes content_hash or hash, source.url, retrieved_at and a disclaimer object.
Errors
| Status | When |
|---|---|
| 400 | Bad query — a malformed filter, or a from that is not RFC 3339 |
| 401 | Missing or invalid API key |
| 404 | Unknown act, segment or watchlist |
| 429 | Rate limit or daily quota exceeded. The response carries Retry-After |
| 503 | An upstream Publications Office call is the only copy available |
Routes
GET
/healthpublicLiveness plus library counts and the last poll. Rate-limited, unauthenticated.
curl -s '/v1/health'GET
/resolve?q=publicResolve a messy citation to 0..n acts. Accepts an Acta ID, a CELEX (including consolidation and corrigendum forms), an ELI URL or path, a EUR-Lex or Cellar URL, or informal wording such as Regulation (EU) 2023/956. If exactly one act matches and the query named an article or annex, the default segment is returned too. An unresolved query is not an error.
q — the citation string (required)
curl -s --get --data-urlencode 'q=Regulation (EU) 2023/956' \
'/v1/resolve'GET
/actsAPI keyList acts with filters and cursor pagination.
celex, resource_type, in_force, is_consolidation, authentic, watchlistdate_publication_from, date_publication_to (YYYY-MM-DD)cursor — opaque, from the previous responselimit — max 100, default 25
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts?in_force=true&limit=1'GET
/acts/{id}API keyAct metadata plus a segment outline (id, kind, anchor, heading, hash). {id} accepts an Acta ID or a CELEX.
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts/32023R0956'GET
/acts/{id}/segmentsAPI keyEvery segment of an act, in document order.
kind — article | paragraph | recital | annex | body
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts/32023R0956/segments'GET
/acts/{id}/segments/{anchor}API keyOne segment with full text, its hash and the official source URL. This is the call a filing tool makes to show a cited article next to a rule.
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts/32023R0956/segments/art_2'GET
/acts/{id}/textAPI keyConcatenated English text of the whole act.
format — plain (default; the only format in the MVP)
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts/32023R0956/text?format=plain'GET
/acts/{id}/graphAPI keyOne hop of the relationship graph: legal_basis, amends, amended_by, corrects, corrected_by, consolidates, latest_consolidation. IDs only, served from Acta with no upstream call.
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/acts/32023R0956/graph'GET
/search?q=publicBM25 search over segment text and English titles. resolve() runs first, so an exact citation is returned ahead of ranked hits and tagged match=exact. Filters are the same as /acts plus kind. Defaults to language=en.
q — the query (required)in_force, resource_type, watchlist, authentic, is_consolidation, kinddate_publication_from, date_publication_to
curl -s --get --data-urlencode 'q="carbon border"' \
--data-urlencode 'in_force=true' '/v1/search'GET
/changesAPI keyThe change feed: new or updated works in scope, plus graph events touching a watchlist. Ordered oldest first; page with cursor.
from — RFC 3339 timestamp (required)watchlist, severity (P0|P1|P2|P3), cursor, limit
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/changes?from=2026-01-01T00:00:00Z&watchlist=cbam-core&severity=P0'GET
/watchlistsAPI keyList watchlists with their resolved set size.
curl -s -H "Authorization: Bearer $ACTA_KEY" '/v1/watchlists'GET
/watchlists/{id}API keyA watchlist definition plus the CELEX set resolved from the Cellar graph at the last poll.
curl -s -H "Authorization: Bearer $ACTA_KEY" \
'/v1/watchlists/cbam-core'GET
/statuspublicLast successful and attempted poll, last poll error, last event, library counts and index size. The field is named `corpus`, as the spec requires.
curl -s '/v1/status'POST
/webhooksAPI keySubscribe to events. Acta POSTs the event JSON to your URL with an X-Acta-Signature header containing sha256=<HMAC-SHA256(secret, raw body)>. Delivery is retried 3 times, then dropped and logged. The secret is returned once, at creation.
curl -s -X POST -H "Authorization: Bearer $ACTA_KEY" \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com/acta","watchlist":"cbam-core","min_severity":"P0"}' \
'/v1/webhooks'Required wording
Acta is an unofficial mirror of texts published by the Publications Office of the European Union. Consolidations are reading aids and are not authentic. Acta is not legal advice and is not a substitute for EUR-Lex or the Official Journal. Hashes identify the bytes Acta stored, not an official instrument.