# Is this directive transposed in this country? > In force, applicable and transposed are three different things. One call returns the national measures a Member State notified for an EU act, and how late they were. Published 2026-08-10 · Updated 2026-08-16 · HTML version: https://invoket.com/blog/is-this-directive-transposed-in-this-country --- An agent that has confirmed an EU directive is **in force** has confirmed almost nothing about whether it binds anyone in a given country. A directive takes effect on companies through **national** measures, and whether a Member State has carried it into national law — and told the Commission it did — is a separate, recorded fact. [`GET /legal/transposition`](/docs/api/legal-transposition) serves that record: the national implementing measures a State notified for an act, each with its national act type, reference, publication date and **notification** date, plus the published transposition deadline and how many days the first notification missed it. Ask for one country, or omit it for a one-line verdict across the **30 EEA States**. ## Three states, routinely collapsed into one Agents — and the models behind them — treat "the NIS2 Directive exists" as equivalent to "NIS2 applies to my counterparty in Spain." Three distinct facts sit between those two sentences. | Question | What it means | Where it is answered | |---|---|---| | **In force?** | The act exists in the Union legal order | [`/legal/eu-act`](/docs/api/legal-eu-act), field `etat` | | **Applicable?** | The act has started to produce effects — sometimes years later | [`/legal/eu-act`](/docs/api/legal-eu-act), field `applicable_from` | | **Transposed?** | A directive has been carried into national law, and notified | [`/legal/transposition`](/docs/api/legal-transposition) | The first two are properties of the act. The third is a property of **an act and a country together**, and it is the one that decides whether a directive bites where your counterparty actually operates. The gap between the first two is already wide enough to break naive reasoning — the AI Act entered into force on 1 August 2024 and its obligations land in tranches spread over years, on a calendar that has itself been amended since. The gap opened by the third is wider still, because it is twenty-seven answers, not one. ## The notification is not paperwork — it is the sanctioned obligation This is the part that makes a notification register worth querying rather than dismissing as bureaucracy. Under **Article 260(3) TFEU**, when the Commission brings a Member State before the Court of Justice for failing to notify measures transposing a directive adopted under a legislative procedure, the referral is accompanied **directly** by a request for financial sanctions — a lump sum, a daily penalty payment, or both. The failure to *notify* is itself what the Court is asked to fine. NIS2 (Directive (EU) 2022/2555, CELEX `32022L2555`) is the live illustration: - **17 October 2024** — the transposition deadline. Most States miss it. - **28 November 2024** — the Commission sends letters of formal notice. - **7 May 2025** — reasoned opinions go to 19 Member States, named, for failing to notify full transposition. - **8 July 2026** — the Commission refers **Ireland, Spain, France and the Netherlands** to the Court of Justice, with a request for a lump sum and daily penalties running until complete transposition is notified. An agent doing supplier due diligence, drafting a cybersecurity clause, or scoping a security questionnaire across the EU in mid-2026 cannot treat "NIS2 applies" as a uniform continental fact. It did not, for four Member States, resolve into the same national obligations at the same time. That divergence is in the register, dated, and it is exactly the kind of thing a model's weights smooth over. ## The call: one act, one country — or the whole map ```http GET /legal/transposition?celex=32019L0790&country=FR GET /legal/transposition?celex=32019L0790 ``` `celex` is required; `country` is an ISO 3166-1 alpha-2 code. Dropping `country` switches the response into **summary mode**. Two shapes under one schema: - **With `country`** — that State's `status`, its `measures[]`, `measure_count`, `first_measure_notified_on` and `deadline_gap_days`. - **Without `country`** — a `summary[]` carrying one `{ country, status, measure_count }` line per State, and none of the per-country fields. The answer comes from a table pre-ingested from EUR-Lex, so a covered act resolves in **milliseconds, with no network call and no secret** at request time. ## `deadline_gap_days`: positive means late The single most useful number in the response is the distance between the published transposition deadline and the earliest measure the State notified. **Positive means the first notification came after the deadline.** France on the DSM copyright directive (`32019L0790`, deadline 2021-06-07) returns `-587`: the first French measure — the July 2019 law creating a neighbouring right for press publishers — was notified on 2019-10-29, well ahead of a deadline that had not yet arrived. The same country on NIS2 returns **`+640`**. The first French notification landed 640 days after the 17 October 2024 deadline — in July 2026, after the referral to the Court. One country, two directives, opposite postures. No model holds that pair. Two rules keep the number honest. It is `null` the moment either date is missing — never estimated. And when an act publishes several deadlines, the **earliest** is used: NIS2 publishes two (`2024-10-17` and `2024-10-18`), both listed in `transposition_deadlines[]`. ## `publication_date` is not `notified_on` They can be years apart, and only one of them counts. A Member State frequently notifies a **pre-existing** national 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**. Reason on `publication_date` and you conclude France transposed a directive before it was written. `deadline_gap_days` is computed from `notified_on` only, and a publication date is never substituted for a missing notification date. Fields absent at the source are absent or `null` in the response, never guessed — `national_ref` is `null` for States that published none. One more ordering trap the endpoint removes: `measures[]` comes back in **source order, not chronological order**. In the French DSM register the earliest notification is the *last* entry of eight. That is why `first_measure_notified_on` is served rather than left for the caller to derive. ## Four statuses, and none of them concludes on national law | `status` | Meaning | |---|---| | `measures_notified` | At least one national measure is recorded for this act and country | | `no_measures_notified` | An act subject to transposition, nothing recorded for this country | | `not_applicable` | An act carrying no transposition obligation — a regulation or a decision — and nothing notified | | `out_of_scope` | A non-EEA country carrying no measure for this act: it was never an addressee | Two of these carry a subtlety worth wiring in. **`act_type` does not decide the status.** The GDPR is a regulation, applies directly, and France notified nothing under it — `not_applicable`, with a `status_reason` saying why. But MiCA (`32023R1114`) is *also* a regulation and France notified four measures under it, so it comes back `measures_notified`, with `transposition_deadline: null` and therefore no `deadline_gap_days`. A regulation **can** carry national implementing measures; the register reports what was notified, not what the act type predicts. **`out_of_scope` is read act by act.** `GB` on NIS2 (2022) is out of scope, while `GB` on the 2000 e-Commerce Directive still returns `measures_notified` with the two measures it notified before withdrawal. The summary sweep covers the 30 EEA States plus any non-EEA State that actually notified something — silencing the United Kingdom's pre-Brexit measures would make the totals lie. The criterion is structural, never historical: a current Member State is never reported out of scope. ## A register of notifications, and it says so four times This is the boundary that defines the product, and it travels in `data.limits` with **every** answer, summary mode included: - **It is a register, not a verdict on conformity.** The measures are those the State chose to notify. Whether they transpose the act correctly or completely is not something a notification register can say. The Commission's own transposition tracking carries the same caveat — a state of play based on information provided by Member States, *without prejudice to the formal assessment*. - **`no_measures_notified` is not "untransposed".** A State may transpose through pre-existing or unnotified provisions. The endpoint reports the state of the register and stops. - **Direct effect is out of scope.** Vertical direct effect, consistent interpretation and State liability mean an untransposed directive is not without legal effect. This endpoint draws no conclusion on national applicability. - **Coverage follows the addressees of each act.** Enlargements and withdrawals are not reconstructed act by act. It also does not serve the text of national measures, rank States, or score transposition quality. An agent that needs the wording of a French implementing act goes to [`GET /legal/article`](/docs/api/legal-article) with the reference this endpoint handed it. ## "Nothing has been notified" is a paid answer The x402 golden rule applied to a register: the agent pays for the answer to its question. A covered act returns its register state — a **200** — including when that state is `no_measures_notified`, `not_applicable` or `out_of_scope`. The `measures` array comes back **empty, not absent**, and `status_reason` says in one sentence what the status means and what it does not mean: ```json { "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 } } ``` "Iceland has notified nothing for NIS2" is the answer the agent came for. Only questions the service cannot answer leave the 200 range, and they are not billed: a malformed CELEX or an unsupported country is a `400`, and a well-formed CELEX outside the corpus is a `404` — one that **lists what is covered**, so a second call can succeed. ## The corpus is selective, and that is the honest limit `GET /legal/transposition` covers the same nine acts as [`GET /legal/eu-act`](/docs/api/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 is a `404` naming these nine. This is a curated digital- and financial-regulation corpus, not a mirror of EUR-Lex. An agent should treat the 404 as "ask elsewhere", not as "no such act". Freshness is a `snapshot`, and the notification dump runs on its **own weekly cycle** — distinct from the consolidated EUR-Lex dump behind `/legal/eu-act`. `provenance.freshness.as_of` dates the register you were served, which matters precisely because a register whose whole point is a moving deadline gap must never be read undated. ## Where it sits in the x402 loop No account, no key, no contract review precedes the first call: 1. **Discover** the endpoint in the live catalog, call it, receive the `402` challenge. 2. **Pay** — sign the chosen rail and replay the request. 3. **Read** — `status`, `measure_count`, `first_measure_notified_on`, `deadline_gap_days`, and the `as_of` that dates all of it. 4. **Branch** — cite the national measure, escalate a country whose gap is sharply positive, or record `no_measures_notified` as a *register state* rather than a legal conclusion. The natural first call is summary mode: one settlement returns the whole map, and only the countries that matter are worth a second, per-country call. The [Quickstart](/docs/quickstart) walks the full discover → `402` → pay → replay cycle with runnable snippets. Price and accepted rails are served live by the [catalog](https://api.invoket.com/catalog), never pinned in an article. ## Chain it with the rest of the legal family The triptych is meant to be walked in order: - [`GET /legal/eu-act`](/docs/api/legal-eu-act) — the consolidated act at a date, with `etat` and `applicable_from`: the *in force* and *applicable* halves (see [Is this EU act in force? Look it up in EUR-Lex by CELEX or ELI](/blog/is-this-eu-act-in-force-by-celex-or-eli)). - [`GET /legal/transposition`](/docs/api/legal-transposition) — the *transposed* half, country by country. - [`GET /legal/article`](/docs/api/legal-article) — the French text a notified measure points to, in force at a date. - [`GET /legal/deadline`](/docs/api/legal-deadline) — when a time limit actually falls, under an explicitly chosen computation regime (see [What date does this legal deadline fall on?](/blog/what-date-does-this-legal-deadline-fall-on)). - [`GET /legal/history`](/docs/api/legal-history) and [`GET /legal/diff`](/docs/api/legal-diff) — when a provision last changed, and what changed. An agent that asks "is this in force?" and stops has asked a third of the question. For the full field reference and error codes, see the [`GET /legal/transposition` documentation](/docs/api/legal-transposition); for how agents discover and call Invoket endpoints, see [For agents](/docs/for-agents). 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.