Transparency obligations under Article 50: implementing each of the four
This guide implements the four duties of Art. 50 in one duty register: the interaction notice under Art. 50(1), the marking under Art. 50(2), the exposure notice under Art. 50(3), and the deep fake and public-interest text disclosure under Art. 50(4), in the manner Art. 50(5) fixes. The checks derive from the disclosure steps of PR-50-MARK v1.0 and from Commission guidelines on Article 50 transparency obligationsPublished, published. At the end the reader holds a duty register with an implementation record and an evidence reference per duty, an interface disclosure configuration, and a check script that fails on any gap.
What the obligation asks for
Art. 50 of Regulation (EU) 2024/1689 sets four duties across two roles. Art. 50(1) requires the provider to design a system that interacts directly with natural persons so that those persons are informed that they interact with an AI system, unless the interaction is obvious to a reasonably well-informed, observant and circumspect person. Art. 50(2) requires the provider of a system that generates synthetic audio, image, video or text to mark the outputs in a machine-readable format and to make them detectable as artificially generated or manipulated. Art. 50(3) requires the deployer of an emotion recognition or biometric categorisation system to inform the persons exposed to it. Art. 50(4) requires the deployer to disclose a deep fake, and to disclose AI-generated text published to inform the public on matters of public interest, with the limited disclosure for an evidently artistic work and the exemption for text under human review or editorial control. Art. 50(5) fixes the manner for all four: clear and distinguishable, at the latest at the time of the first interaction or exposure, and conforming to the applicable accessibility requirements. A company that builds a chatbot and runs it in its own product holds both roles and carries every duty its functions trigger. The Art. 50 obligation record splits the article into testable, documentation and process elements. This guide covers the function-to-paragraph assignment with the check of each claimed exemption, the interaction notice, the Art. 50(3) notice, the deep fake label, the public-interest text disclosure and the accessibility of each disclosure. For the marking presence, survival and detection elements under Art. 50(2), the sibling guide on watermark survivability and the guide on C2PA manifest validation give the procedures; this guide records their outputs in the duty register and does not repeat them.
Art. 50 applies from the general application date In force, which Regulation (EU) 2026/1744 did not move; the obligation record notes that the Omnibus left the content of paragraphs 1 to 6 unchanged and amended paragraph 7. A system that generates synthetic content and was placed on the market before that date has a grace period for the Art. 50(2) marking duty only, under Art. 111(4) Deferred; the interaction notice and the deployer disclosures have no grace period. Art. 50 sets no numeric threshold. No harmonised standard is cited in the Official Journal for Art. 50, so no presumption of conformity is available, and no JTC 21 draft covers it; the level of the source hierarchy in use is a Commission guideline and code. Commission guidelines on Article 50 transparency obligationsPublished, published, gives each duty its scope and exemption reading, and Code of Practice on Transparency of AI-Generated ContentPublished, published, gives the marking layers under Art. 50(2) and the label placement under Art. 50(4); both are listed on the standards page. Which marking technique set counts as adequate under Art. 50(2) is an unsettled point; the register records the layer set the architecture description declares and takes no position of its own.
Inputs
The inputs below are the subset of the PR-50-MARK v1.0 input table that the disclosure and register steps use. The full table is on the protocol page.
- The role determination for the organisation, provider or deployer or both, per function.
- A list of every function of the system that interacts with natural persons, generates synthetic content, runs emotion recognition or biometric categorisation, produces a deep fake, or publishes text on matters of public interest.
- Access to each interaction interface as a new user: a test account per interface with no prior session.
- The exemption claim register: function, paragraph relied on, reasoning, for every exemption the provider or deployer claims.
- The marking architecture description per output modality, and the outputs of the two sibling guides where the marking has been tested.
- The list of distribution surfaces and premises where a deep fake, a public-interest text or an Art. 50(3) system is shown.
- The editorial responsibility record and the review records for each publication where the editorial-control exemption is claimed.
- The placed-on-market date of each generating system, for the Art. 111(4) status.
python3with PyYAML on the workstation, version recorded in the tool register.
Procedure
Each step names the guideline paragraph, the Act article or the protocol step it derives from and the record it produces. Code blocks follow the step they belong to. Every system name, function, path, identifier and value in the examples is synthetic.
List each function of the system and assign it to the Art. 50 paragraph and role that apply.
Record function-register: one row per function with the Art. 50 paragraph assigned and the role held
[Commission guidelines on Article 50 transparency obligations, paras 30 and 60 to 63; PR-50-MARK step 2]
Record each exemption claimed for a function, with the paragraph relied on and the written reasoning.
Record exemption-claim-register: function, paragraph relied on, written reasoning
[Commission guidelines on Article 50 transparency obligations, paras 42 to 45 and 86 to 93; PR-50-MARK step 3]
Record whether each generating system was placed on the market before the Art. 50 application date.
Record grace-period record: placed-on-market status, steps taken to meet Art. 50(2), completion of each step
[Regulation (EU) 2024/1689, Art. 111(4)]
Write the duty register with one entry per paragraph: trigger, exception, implementation record, evidence.
Record duty-register.yaml: one entry per Art. 50 paragraph, with trigger, exception, implementation record and evidence
[AIAssuranceLabs procedure]
Configure the interaction notice in each interface. Open a new session on each interface as a new user.
Record interaction-notice-log and notice-placement-log per interface: moment the notice appears, location, capture
[Commission guidelines on Article 50 transparency obligations, paras 38, 142 and 143; PR-50-MARK steps 26 and 27]
Apply the declared marking layers per modality. Check presence on a sample of outputs per output path.
Record architecture-description and the presence logs per modality and output path
[Code of Practice on Transparency of AI-Generated Content, Section 1, Measure 1.1; PR-50-MARK steps 4 and 12 to 16]
Observe each emotion recognition or biometric categorisation deployment as an exposed person.
Record exposure-notice-log: deployment, notice form, moment of notice at first exposure, capture
[Commission guidelines on Article 50 transparency obligations, paras 105 to 108; PR-50-MARK step 28]
Display each deep fake sample on each distribution surface. Download, crop and re-share each labelled sample.
Record deepfake-label-log and label-persistence-log per sample and surface: label form, position, perceivable after each operation
[Commission guidelines on Article 50 transparency obligations, para 117; Code of Practice on Transparency of AI-Generated Content, Section 2, Commitment 1, Measure 1.1; PR-50-MARK steps 29 and 30]
Open each public-interest text on its published surface. Where the exemption is claimed, obtain the editorial responsibility record.
Record text-disclosure-log, or editorial-exemption-check where the exemption is claimed, per publication
[Commission guidelines on Article 50 transparency obligations, paras 131 and 133 to 138; PR-50-MARK steps 31 and 32]
Run the prescribed accessibility checks on each disclosure. Classify each disclosure as clear, distinguishable, timely and accessible.
Record accessibility-check-log and disclosure-classification per disclosure element
[Commission guidelines on Article 50 transparency obligations, para 144; PR-50-MARK steps 33 and 40]
Run the register check over the duty register. Resolve every line the check reports as a gap.
Record duty-register-check output: one line per duty, pass or gap, with the missing field named
[AIAssuranceLabs procedure]
Write the audit record per surface and list each gap with its Art. 50 paragraph.
Record Interaction disclosure and label audit record and remediation list (PR-50-MARK output)
[AIAssuranceLabs procedure; PR-50-MARK steps 43 and 44]
Example for step 4. The register below is a synthetic example for a fictitious product with an invented name, SYN-Assist, whose owner holds both roles: a chat assistant and an image generator as provider, and a showroom attention estimator, a campaign video with a synthetic presenter and a published news digest as deployer. One entry per paragraph carries the duty in the words of the article, the trigger, the exception the paragraph offers with its text reference, whether the exception is claimed and where its record sits, the implementation record, and the evidence references. The Art. 50(2) entry additionally carries the Art. 111(4) status and points to the regulation entry that holds the grace-period date. The criminal-offence exception that each of the four paragraphs contains is recorded the same way, with a law-enforcement authorisation record where it is claimed; the fictitious product claims none. The Art. 50(3) entry names the Art. 3(40) definition next to that exception, because a system outside the definition is outside the paragraph rather than excepted from it. Every path and identifier is invented.
# Synthetic example: duty register for the fictitious product SYN-Assist.
# Every function, path, identifier and value below is invented for this guide.
system: SYN-Assist
version: 0.0.0-synthetic
roles: [provider, deployer]
duties:
- id: D-50-1
paragraph: "Art. 50(1)"
duty: inform natural persons that they interact with an AI system
role: provider
functions: [chat-assistant]
trigger: first interaction of a natural person on the chat surface
in_scope: true
exception:
text_ref: "Art. 50(1), first sentence, 'unless' clause: obvious to a reasonably well-informed, observant and circumspect person"
claimed: false
record: records/art50-1-obviousness-assessment.md # assessment kept even where not claimed
implementation_record: records/disclosure-config-chat.json
evidence: [logs/interaction-notice-log.csv, logs/notice-placement-log.csv]
- id: D-50-2
paragraph: "Art. 50(2)"
duty: mark synthetic outputs in a machine-readable format and make them detectable
role: provider
functions: [image-generator]
modalities: [image]
trigger: every generated output on every output path (api, ui)
in_scope: true
exception:
text_ref: "Art. 50(2), third sentence: assistive function for standard editing, or no substantial alteration of the input data or its semantics"
claimed: false
record: null
legacy_status:
placed_on_market_before_art50_date: true
grace_period_entry: article-50-2-legacy-marking
record: records/grace-period-record.md
implementation_record: records/marking-architecture-image.md
evidence: [reports/marking-presence-survivability.md, reports/third-party-detectability.md]
- id: D-50-3
paragraph: "Art. 50(3)"
duty: inform natural persons exposed to an emotion recognition or biometric categorisation system
role: deployer
functions: [showroom-attention-estimator]
trigger: first exposure of a natural person on the premises
in_scope: true
exception:
text_ref: "Art. 3(40): a system ancillary to another commercial service and strictly necessary for objective technical reasons is not a biometric categorisation system; Art. 50(3), second sentence: criminal-offence use permitted by law"
claimed: false
record: null
implementation_record: records/exposure-notice-showroom.md
evidence: [logs/exposure-notice-log.csv, records/data-protection-record.md]
- id: D-50-4a
paragraph: "Art. 50(4), first subparagraph"
duty: disclose that deep fake content is artificially generated or manipulated
role: deployer
functions: [campaign-video-synthetic-presenter]
trigger: first exposure on each distribution surface
in_scope: true
exception:
text_ref: "Art. 50(4), first subparagraph: evidently artistic, creative, satirical, fictional or analogous work, limited disclosure"
claimed: false
record: null
implementation_record: records/deepfake-label-spec.md
evidence: [logs/deepfake-label-log.csv, logs/label-persistence-log.csv]
- id: D-50-4b
paragraph: "Art. 50(4), second subparagraph"
duty: disclose that published public-interest text is artificially generated or manipulated
role: deployer
functions: [news-digest]
trigger: publication of each text on the news surface
in_scope: true
exception:
text_ref: "Art. 50(4), second subparagraph: human review or editorial control, and a natural or legal person holds editorial responsibility"
claimed: true
record: records/editorial-responsibility-record.md
implementation_record: records/editorial-review-workflow.md
evidence: [logs/editorial-exemption-check.csv]
- id: D-50-5
paragraph: "Art. 50(5)"
duty: give each disclosure clearly and distinguishably, at the latest at the first interaction or exposure, in an accessible form
role: provider and deployer
applies_to: [D-50-1, D-50-3, D-50-4a, D-50-4b]
trigger: every disclosure under the four paragraphs
in_scope: true
exception:
text_ref: "none in Art. 50(5)"
claimed: false
record: null
implementation_record: records/disclosure-manner-spec.md
evidence: [logs/accessibility-check-log.csv, logs/disclosure-classification.csv]
Example for step 5. The configuration below is the synthetic implementation record for the chat surface, referenced by the D-50-1 entry above. The notice text sits in the interface, above the first message, at session start, before the person types; the excluded placements list names the locations the guidelines do not accept, so that a later change to the surface cannot move the notice there without a diff in this file. The exemption block records that the obviousness test was assessed and not claimed, with the record path; where the provider claims it, the flag is set to true and the reason states the assessment. The accessibility block carries the parameters of the synthetic configuration; the applicable accessibility requirement is determined per provider or deployer and recorded, and the values below are inputs of this example and not a requirement of the Act. Every string and path is invented.
{
"_comment": "Synthetic example: interface disclosure configuration for the SYN-Assist chat surface.",
"surface": "chat-web",
"duty_id": "D-50-1",
"disclosure": {
"text": "You are chatting with an AI system. Replies are generated automatically.",
"locales": ["en", "de", "pl"],
"placement": "in-interface",
"position": "above-first-message",
"trigger": "session_start",
"persistent": true,
"dismissible": false
},
"excluded_placements": ["terms-of-service", "help-page", "settings-menu", "system-prompt-only"],
"voice_channel": {
"spoken_notice_before_first_reply": true,
"audio_asset": "assets/notice-en.wav"
},
"accessibility": {
"role": "status",
"aria_live": "polite",
"min_contrast_ratio": 4.5,
"requirement_record": "records/accessibility-requirement-determination.md"
},
"exemption": {
"claimed": false,
"reason": "The chat surface carries the product name only; the obviousness assessment recorded the interaction as not obvious to a reasonably well-informed, observant and circumspect person.",
"record": "records/art50-1-obviousness-assessment.md"
},
"evidence": {
"capture_on_first_session": true,
"log": "logs/interaction-notice-log.csv"
}
}
Example for step 11. The script reads the duty register, and for each duty in scope requires a non-empty implementation record and at least one evidence reference, checks that each referenced file exists relative to the register, requires a record wherever an exception is claimed, and requires a grace-period record wherever the Art. 111(4) status is set. A duty marked out of scope needs a reason. The script prints one line per duty and exits with a non-zero code on any gap, so that it can run in the same pipeline as the marking checks of the sibling guides. PyYAML is a published parser named as an example of its class.
# Synthetic example: check duty-register.yaml for gaps. Requires PyYAML (pip install pyyaml).
import pathlib
import sys
import yaml
REQUIRED_WHEN_IN_SCOPE = ("implementation_record", "evidence")
def missing_files(base, refs):
refs = refs if isinstance(refs, list) else [refs]
return [r for r in refs if r and not (base / r).exists()]
def gaps_for(duty, base):
gaps = []
if not duty.get("in_scope", False):
if not duty.get("out_of_scope_reason"):
gaps.append("out of scope without a reason")
return gaps
for field in REQUIRED_WHEN_IN_SCOPE:
if not duty.get(field):
gaps.append(f"missing {field}")
else:
for f in missing_files(base, duty[field]):
gaps.append(f"{field} file not found: {f}")
exc = duty.get("exception") or {}
if exc.get("claimed") and not exc.get("record"):
gaps.append("exception claimed without a record")
legacy = duty.get("legacy_status") or {}
if legacy.get("placed_on_market_before_art50_date") and not legacy.get("record"):
gaps.append("legacy status without a grace-period record")
return gaps
def main(path):
register_path = pathlib.Path(path)
with register_path.open(encoding="utf-8") as fh:
register = yaml.safe_load(fh)
duties = register.get("duties", [])
total = 0
for duty in duties:
gaps = gaps_for(duty, register_path.parent)
total += len(gaps)
status = "pass" if not gaps else "gap"
print(f'{duty["id"]:<8} {duty["paragraph"]:<34} {status:<5} {"; ".join(gaps)}')
print(f"{total} gap(s) across {len(duties)} duties")
sys.exit(1 if total else 0)
if __name__ == "__main__":
main(sys.argv[1] if len(sys.argv) > 1 else "duty-register.yaml")
| id | paragraph | status | gaps |
|---|---|---|---|
| D-50-1 | Art. 50(1) | pass | |
| D-50-2 | Art. 50(2) | gap | evidence file not found: reports/third-party-detectability.md |
| D-50-3 | Art. 50(3) | pass | |
| D-50-4a | Art. 50(4), first subparagraph | pass | |
| D-50-4b | Art. 50(4), second subparagraph | gap | implementation_record file not found: records/editorial-review-workflow.md |
| D-50-5 | Art. 50(5) | pass |
Each gap row becomes one line of the remediation list in step 12, with the Art. 50 paragraph, the observed state and the record reference.
A pitfall that vendor documentation omits
The documentation of a chat or voice SDK describes the AI disclosure as a configurable banner, a system-prompt line, or a sentence in the onboarding terms, and leaves the placement and the moment to the integrator. Art. 50(5) of Regulation (EU) 2024/1689 fixes the moment: the information is given at the latest at the time of the first interaction. A disclosure that the model produces only when the person asks whether they are talking to a machine is a reply conditioned on the question, and it arrives after the first interaction; a line in the system prompt with no rendered notice is the same case. Commission guidelines on Article 50 transparency obligationsPublished, published, read the placement in paragraph 142 as the interface itself, and not the terms, a menu or a help page, and the timing in paragraph 143 as the first interaction; step 27 of PR-50-MARK v1.0 records the location, and the obligation record lists the terms-of-service placement among its common findings. The configuration in the example for step 5 therefore carries an explicit excluded_placements list and a trigger of session start, and the evidence is a capture of the first session as a new user, which is the observation a policy statement cannot replace.
The second omission concerns the grace period. Art. 111(4), inserted by Regulation (EU) 2026/1744, gives providers of systems that generate synthetic content and were placed on the market before the Art. 50 application date a grace period for the Art. 50(2) marking duty; the entry Deferred carries its end date. The paragraph names Art. 50(2) and no other paragraph. A legacy generating system that also interacts with natural persons carries the Art. 50(1) notice from the general application date, and a deployer of the same system carries Art. 50(3) and Art. 50(4) from that date; a release note that reads the grace period as covering the whole article leaves three duties unmet during it. The register above records the legacy status on the D-50-2 entry only, and the check script requires a grace-period record there and nowhere else.
What the result shows and what it does not
The register and the logs show, for each function in the function register, which Art. 50 paragraph applies, whether an exemption is claimed and where its record sits, and what the interface, the premises or the distribution surface showed at the first interaction or exposure on the test date. The protocol's Limitations section bounds the result. The protocol records the provider's or deployer's determination that content is a deep fake, that a text concerns a matter of public interest, or that an exemption applies, and tests the behaviour that follows; it does not make that determination, which is an output of PR-CLS v1.0 and a matter for counsel. It does not assess the lawfulness of the personal data processing by an emotion recognition or biometric categorisation system under Art. 50(3). It does not determine whether the Web Accessibility Directive or the European Accessibility Act applies to a given deployer; it runs the checks the applicable directive prescribes once that question is answered. The marking results referenced by the register cover the sampled outputs, the listed output paths and the recorded transformation set only, and a result recorded under the working reading of the technique-adequacy point does not show that the Commission or a market surveillance authority accepts the technique set. A register with no gap is evidence for the provider's or deployer's own file. The Article 50 transparency and marking/watermark testing service runs the full protocol on the notice, the mark and the labels, within the limits stated on what we cannot do.
Related pages
The obligation, the protocol, the two sibling guides on the Art. 50(2) marking layers and the hub for generative AI features are listed below; the chatbot scenario applies the same sequence to a chat surface that is already live.
- Obligations
- Protocols
- Related guides
- ICP hubs
Questions
What are the EU AI Act Article 50 transparency obligations?
Art. 50 of Regulation (EU) 2024/1689 sets four duties. Under Art. 50(1) the provider informs natural persons that they interact with an AI system. Under Art. 50(2) the provider marks synthetic audio, image, video and text in a machine-readable format and makes it detectable. Under Art. 50(3) the deployer informs persons exposed to an emotion recognition or biometric categorisation system. Under Art. 50(4) the deployer discloses deep fakes and AI-generated public-interest text. Art. 50(5) requires each disclosure to be clear, distinguishable, timely and accessible.
Which exemptions does AI Act Article 50 transparency allow?
Each of Art. 50(1) to (4) has an exception. Art. 50(1) does not apply where the interaction is obvious to a reasonably well-informed person. Art. 50(2) does not apply to assistive editing or a function that does not substantially alter the input. Under Art. 3(40) a system ancillary to another commercial service and strictly necessary for objective technical reasons is not a biometric categorisation system, so Art. 50(3) does not reach it. Art. 50(4) limits the deep fake disclosure for artistic work and exempts text under named editorial responsibility.
Do the EU AI Act transparency obligations already apply?
Yes. Art. 50 applies from the general application date shown on the regulation page, and Regulation (EU) 2026/1744 did not move it. The Omnibus inserted Art. 111(4), a grace period for the Art. 50(2) marking duty only, for systems that generate synthetic content and were placed on the market before that date; the article-50-2-legacy-marking entry carries the end date. The interaction notice under Art. 50(1) and the deployer disclosures under Art. 50(3) and (4) have no grace period.
Every inquiry receives a reply within 24 hours. Scope and availability are discussed per request.