GET /legal/transposition
Returns the national implementing measures a Member State has notified to the European Commission for an EU act: each measure with its national act type, title, national reference, publication date and notification date, plus the published transposition deadline and how far the first notification fell from it. The answer is served from a local table pre-ingested from EUR-Lex, so a covered act resolves in milliseconds with no network call and no secret at request time.
In force, applicable and transposed are three different things, and agents routinely collapse them into one.
- In force - the act exists in the Union legal order:
GET /legal/eu-act, fieldetat.- Applicable - the act has started to produce effects, which may be years after entry into force: the same endpoint, field
applicable_from.- Transposed - a directive has been carried into national law by national measures. That is this endpoint, and it is the one that decides whether a directive bites in a given Member State.
What is served here is the register of notifications. It is not, and never becomes, an assessment of conformity or completeness.
See the live /catalog for the authoritative endpoint
listing and price.
x402 golden rule: the agent pays for the answer to its question. A
covered act returns its register state -> 200, including when the register
is empty (no_measures_notified) or when the act carries no transposition
obligation at all (not_applicable): “nothing has been notified” is the
answer the agent came for, and it is a paid answer. An act outside the corpus
is a 404, not billed.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
celex | string | yes | CELEX identifier of the EU act, for example 32019L0790 |
country | string | no | ISO 3166-1 alpha-2 code of the Member State. Omitted, the response switches to summary mode |
GET /legal/transposition?celex=32019L0790&country=FR
GET /legal/transposition?celex=32019L0790
Two response shapes under one schema
- With
country- that State’sstatus, itsmeasures[], itsmeasure_count,first_measure_notified_onanddeadline_gap_days. - Without
country- asummary[]with one line per State (country,status,measure_count) and none of the per-country fields. The sweep covers the 30 EEA States - the EU-27 plus IS, LI and NO - plus any non-EEA State that actually notified measures for the act. The United Kingdom carries some, from before its withdrawal: silencing them would make the total lie.
Covered acts
The corpus is selective - the same acts as
GET /legal/eu-act:
32000L0031 (e-Commerce) · 32014R0910 (eIDAS) · 32016R0679 (GDPR) ·
32019L0790 (DSM copyright) · 32022L2555 (NIS2) · 32022R1925 (DMA) ·
32022R2065 (DSA) · 32023R1114 (MiCA) · 32024R1689 (AI Act)
Any other CELEX returns a 404 that lists these nine.
200 response - UnifiedResponse
{
"data": { ... },
"provenance": {
"source": "eur-lex-ntm",
"fetched_at": "2026-07-29T16:05:05Z",
"freshness": { "kind": "snapshot", "as_of": "2026-07-29T00:00:00Z" }
}
}
provenance.source:eur-lex-ntm- the national transposition measures published by EUR-Lex.freshness.kind:snapshot;as_ofdates the notification dump, which has its own weekly cycle, distinct from the consolidated EUR-Lex dump behind/legal/eu-act.
Fields of data
| Field | Type | Description |
|---|---|---|
act | object | The act: celex, act_type, transposition_deadline, transposition_deadlines[], and title when the consolidated corpus carries one - never rebuilt from the number |
country | string | Echo of the requested State, upper-cased. Absent in summary mode |
status | string | Closed enumeration, below. Absent in summary mode |
status_reason | string | Why that status, in one sentence. Served when the status calls for it |
measures | array | The notified measures, in source order. Empty, never absent, when nothing is notified. Absent in summary mode |
measure_count | number | Real count for that country - and, in summary mode, the total across States |
first_measure_notified_on | string | The earliest known notified_on. Absent when nothing is notified |
deadline_gap_days | number|null | Days between the deadline and the earliest notification. Positive means late |
summary | array | Summary mode only: one { country, status, measure_count } line per State |
limits | array | Three fixed sentences on what this verdict is not. Served with every answer |
status
| Value | Meaning |
|---|---|
measures_notified | At least one national measure is recorded for this act and country |
no_measures_notified | An act subject to transposition, with nothing recorded for this country |
not_applicable | An act carrying no transposition obligation - a regulation or a decision - and nothing notified |
None of the three concludes on national law. And a regulation can carry
national implementing measures: when it does, it is reported as
measures_notified like any other act (see the MiCA example below).
measures[]
| Field | Type | Description |
|---|---|---|
celex_ntm | string | Identifier of the notified measure in EUR-Lex |
title | string | Title as notified, in the national language |
national_act_type | string | Loi, Ordonnance, Décret, Arrêté, Mesures administratives… |
national_ref | string | National reference as notified (French NOR, official journal number). null when the State published none |
publication_date | string | Publication in the national official journal |
notified_on | string | Date the State notified the measure to the Commission - the date this endpoint reasons on |
link | string | National text at the Member State, when it was notified |
Fields missing at the source are absent or null - never guessed.
publication_date is not notified_on
They can be years apart, and only one of them counts. A Member State often
notifies a pre-existing act as transposing a directive: in the French
register for the DSM Directive, an Arrêté published on 2016-10-20 - two
and a half years before the directive existed - was notified on
2021-10-05. deadline_gap_days is computed from notified_on only, and a
publication date is never substituted for a missing notification date.
Reading deadline_gap_days
Days between the published transposition deadline and the earliest notified
measure. Positive means the first notification came after the deadline
(late); negative means before it. It is null as soon as either date is
missing - never estimated.
The act’s deadline is the earliest one published when the act carries
several: NIS2 publishes two (2024-10-17 and 2024-10-18), and both are
listed in transposition_deadlines[].
Example - one country: France and the DSM Directive
Eight measures, of which two are shown here (measures[] abridged for this
page - the service returns all eight). Note that the earliest notification is
the last entry: measures come in source order, not chronological order,
which is exactly why first_measure_notified_on is served rather than left for
the caller to derive.
{
"data": {
"act": {
"celex": "32019L0790",
"act_type": "directive",
"transposition_deadline": "2021-06-07",
"transposition_deadlines": ["2021-06-07"]
},
"country": "FR",
"status": "measures_notified",
"measures": [
{
"celex_ntm": "72019L0790FRA_202058837",
"title": "LOI no 2020-1508 du 3 décembre 2020 portant diverses dispositions d'adaptation au droit de l'Union européenne en matière économique et financière",
"national_ref": "ECOM1935457L",
"national_act_type": "Loi",
"publication_date": "2020-12-04",
"notified_on": "2020-12-18",
"link": null
},
{ "…": "six more measures, in source order: two Ordonnances, three Décrets and the 2016 Arrêté discussed above" },
{
"celex_ntm": "72019L0790FRA_278035",
"title": "LOI no 2019-775 du 24 juillet 2019 tendant à créer un droit voisin au profit des agences de presse et des éditeurs de presse (1)",
"national_ref": "MICX1902858L",
"national_act_type": "Loi",
"publication_date": "2019-07-26",
"notified_on": "2019-10-29",
"link": null
}
],
"measure_count": 8,
"first_measure_notified_on": "2019-10-29",
"deadline_gap_days": -587,
"limits": [
"Measures are those notified to the European Commission by the Member State; this is a register of notifications, not an assessment of conformity or completeness.",
"`no_measures_notified` means nothing is recorded for this act; it does not mean the directive is untransposed in national law, which may transpose it through pre-existing or unnotified provisions.",
"Direct effect (vertical), consistent interpretation and State liability are out of scope: an untransposed directive is not without legal effect, and this endpoint draws no conclusion on national applicability."
]
},
"provenance": {
"source": "eur-lex-ntm",
"fetched_at": "2026-07-29T16:05:05Z",
"freshness": { "kind": "snapshot", "as_of": "2026-07-29T00:00:00Z" }
}
}
France notified 587 days before the deadline. For NIS2, the same country
comes out at +640: the first French notification landed 640 days after
the 2024-10-17 deadline.
Example - summary mode: one line per State
Omit country and the answer becomes a portfolio view: which States have
notified anything for this act, and how much.
{
"data": {
"act": {
"celex": "32019L0790",
"act_type": "directive",
"transposition_deadline": "2021-06-07",
"transposition_deadlines": ["2021-06-07"]
},
"measure_count": 102,
"summary": [
{ "country": "AT", "status": "measures_notified", "measure_count": 2 },
{ "country": "CZ", "status": "measures_notified", "measure_count": 17 },
{ "country": "FR", "status": "measures_notified", "measure_count": 8 },
{ "country": "IS", "status": "no_measures_notified", "measure_count": 0 },
{ "country": "LI", "status": "no_measures_notified", "measure_count": 0 },
{ "country": "NO", "status": "no_measures_notified", "measure_count": 0 },
{ "…": "the remaining EEA States, one line each" }
],
"limits": ["… the three fixed sentences …"]
}
}
measure_count at the top level is the total across States (102 here), not
the length of the abridged extract above. There is no status, no measures[]
and no deadline_gap_days in this shape.
Example - a regulation: not_applicable
The GDPR is a regulation. It applies directly, carries no transposition
obligation, and France has notified nothing under it. That is a 200 with a
motivated not_applicable, not an error and not an empty page:
{
"data": {
"act": {
"celex": "32016R0679",
"act_type": "regulation",
"transposition_deadline": null,
"transposition_deadlines": []
},
"country": "FR",
"status": "not_applicable",
"status_reason": "act `32016R0679` is a regulation and carries no transposition obligation: it applies directly in national law. National implementing measures are served when a Member State notifies them",
"measures": [],
"measure_count": 0
}
}
Example - a regulation that does carry measures
MiCA is also a regulation, and France has notified four measures under it - so
the status is measures_notified, transposition_deadline is null (a
regulation publishes none) and deadline_gap_days is therefore absent. The
act_type never decides the status on its own.
{
"data": {
"act": {
"celex": "32023R1114",
"act_type": "regulation",
"transposition_deadline": null,
"transposition_deadlines": []
},
"country": "FR",
"status": "measures_notified",
"measures": [
{
"celex_ntm": "72023R1114FRA_202502106",
"title": "Ordonnance n°2024-936 du 15 octobre 2024 relative aux marchés de crypto-actifs",
"national_ref": "ECOT2415927R",
"national_act_type": "Ordonnance",
"publication_date": null,
"notified_on": "2025-04-14",
"link": null
},
{ "…": "three more Décrets, notified between 2025-04-14 and 2025-12-26" }
],
"measure_count": 4,
"first_measure_notified_on": "2025-04-14"
}
}
Example - nothing notified, said as such
Iceland has notified no measure for NIS2. The measures array is empty, not
absent, and status_reason says in one sentence what the status means -
and, just as importantly, what it does not mean.
{
"data": {
"act": {
"celex": "32022L2555",
"act_type": "directive",
"transposition_deadline": "2024-10-17",
"transposition_deadlines": ["2024-10-17", "2024-10-18"]
},
"country": "IS",
"status": "no_measures_notified",
"status_reason": "no national implementing measure is recorded for this act and country; this is the state of the notification register, not a finding of non-transposition",
"measures": [],
"measure_count": 0
}
}
What this endpoint will not do
The three sentences below travel in data.limits with every answer,
including the summary mode. They are the contract, not small print.
- It is a register, not a verdict on conformity. The measures are those the Member State chose to notify; whether they transpose the act correctly or completely is not something a notification register can say.
no_measures_notifiedis not “untransposed”. A State may transpose through pre-existing or unnotified provisions. The endpoint reports the state of the register, and stops there.- Direct effect is out of scope. Vertical direct effect, consistent interpretation and State liability mean an untransposed directive is not without legal effect - and this endpoint draws no conclusion on national applicability.
It also does not serve the text of the national measures, rank States, or score transposition quality.
Errors
Only requests the service cannot answer leave the 200 range.
| Status | code | Case |
|---|---|---|
| 400 | INVALID_REF | No celex supplied |
| 400 | INVALID_INPUT | Malformed celex, or a country outside the covered list |
| 404 | UNKNOWN_ACT | The CELEX is well formed but outside the selective corpus |
| 404 | NOT_FOUND | The served store carries no transposition table |
| 500 | INTERNAL | Internal error (detail logged, not exposed) |
{ "code": "UNKNOWN_ACT", "error": "no national transposition data for act `39999R9999`; the corpus is selective and covers 32000L0031, 32014R0910, 32016R0679, 32019L0790, 32022L2555, 32022R1925, 32022R2065, 32023R1114, 32024R1689" }
{ "code": "INVALID_INPUT", "error": "country `XX` is not covered; supported countries are AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK" }
Each refusal lists what is covered, so a second call can succeed.
Attribution
Transposition data is derived from the national implementing measures published by EUR-Lex / Cellar by the Publications Office of the European Union; reuse must preserve attribution to the European Union and EUR-Lex.
See also
GET /legal/eu-act- the consolidated text of an EU act at a date, withetatandapplicable_from: the in force and applicable halves of the triptych.GET /legal/deadline- the due date of a time limit under an explicitly chosen computation regime.GET /legal/history- the version timeline of an article.- For agents - discovery surfaces, the live
/catalogand how settlement works.