EU AI Act — Article 50 Transparency
Article 50 of the EU AI Act requires that a person be informed when they are interacting with an AI system (unless this is obvious from the context), and that AI-generated or synthetically-modified audio, image, video, or text content be marked as such. The obligation applies from August 2, 2026. This page documents the AI-disclosure controls Devotel Orbit already ships that satisfy this obligation for AI voice and chat agents, how to enable them, and how to export evidence for a regulator or enterprise buyer.Overview
AI disclosure is a tenant-scoped, per-regulation opt-in. A single settings surface drives the same behavior for four regulations that share the same shape: the EU AI Act Article 50, Korea’s AI Basic Act (live since 2026-01-22), California SB 243 (live since 2026-01-01), and the Utah AI Policy Act. Configure it under Settings → Compliance → AI Disclosure in the dashboard, or via the API described below. Disclosure is off by default for every workspace. A tenant operator turns on the rules that apply to their traffic.
Not automatic geo-detection. Orbit does not infer a contact’s jurisdiction from a phone number, address, or IP — enabling a rule applies it workspace-wide to every AI interaction, it does not switch on or off per contact based on location. If your organization’s traffic touches the EU, enable the eu_ai_act_enabled rule for the whole workspace. The one exception is the California SB 243 minor reminder, which fires only for contacts you have explicitly flagged as a minor — Orbit never infers minor status from a birth date or other signal.
What ships today
- Chat notice — a configurable notice (“You are chatting with an AI assistant…”) is prepended to an AI agent’s first reply in a conversation. It is sent once per conversation — it does not repeat on every turn.
- Voice intro — a configurable spoken introduction (“This call is being handled by an AI agent…”) is played before an AI voice agent begins a call. You can supply a pre-recorded audio URL or let Orbit synthesize the text.
- AI-generated content marking — messages sent by an AI agent are stamped with
metadata.ai_generated: true. Recorded calls with any AI involvement are stamped with EU AI Act Article 50 provenance metadata on the archived recording. Where the configured text-to-speech provider embeds an inaudible content-provenance watermark, that support is recorded per call — watermarking coverage varies by TTS provider today, so treat it as an additional signal rather than a universal guarantee. - California SB 243 minor reminder — when enabled, contacts explicitly flagged as a minor get a periodic “you’re talking to an AI” reminder during long-running sessions, on a configurable interval.
- Conformity dossier export — a one-click, per-agent evidence pack that maps the agent’s transparency configuration, evaluation/red-team results, human-oversight approvals, and decision audit log to EU AI Act Articles 12, 14, 15, and 50.
- AI-disclosure ledger export — a privacy-preserving, tamper-evident, cryptographically signed ledger proving when and where an AI (not a human) handled an interaction, independently verifiable without trusting Orbit’s UI.
Configuring AI disclosure
Dashboard
Navigate to Settings → Compliance → AI Disclosure. Edit the chat notice and voice intro copy, then turn on EU AI Act §50 (and any other applicable jurisdiction rules) under “Jurisdiction rules”. Turn on Enabled by default so the notices are actually presented — the jurisdiction toggles alone only mark which regulations apply; Enabled by default is what activates stamping and notice delivery.API
{ "settings": null } if never configured):
owner or admin role.
Every update is written to the audit log (
compliance.ai_disclosure_updated) and invalidates the in-process settings cache immediately, so a toggle takes effect on the very next agent turn.
Verifying it’s working
-
Live check — with
default_enabledandeu_ai_act_enabledon, start a new chat session with an AI agent and confirm the configuredchat_notice_textappears on the first reply; place a test call to an AI voice agent and confirm the voice intro plays before the agent speaks. -
Per-turn metadata — inspect a chat message sent by the agent and confirm
metadata.ai_generatedistrue. -
Conformity dossier — export the evidence pack for an agent:
Add
?format=htmlfor a downloadable, human-readable evidence pack suitable for an auditor or enterprise security questionnaire. Each section reportspresent,partial,absent, orunavailable— a legacy tenant missing a backing table degrades that one section rather than failing the whole export. -
AI-disclosure ledger — export the signed, tamper-evident ledger for an agent:
The ledger carries provenance metadata only (agent id, model, outcome, timestamps, aggregate counts) — never verbatim prompt/response text — and is signed with a detached content credential so a copy handed to a regulator or partner can be verified without trusting Orbit’s UI.
owner, admin, or developer role and are themselves audit-logged.
Remediating a degraded dossier section
Each dossier section reports one of four statuses, shown in both the JSON (sections[].status) and the HTML pack’s section badge. Treat anything other than present as a to-do, not a verdict:
Verifying the signed ledger
The AI-disclosure ledger’s signature covers every byte of the ledger body, so “independently verifiable” is mechanical: recompute the digest and MAC over what you received and compare.-
Export the JSON ledger (this is the payload to verify):
The response wraps the ledger in
data.ledger. Its shape:ledger_version,generated_at,tenant_id,agent,disclosure_posture,jurisdiction_resolution,summary,entries,note,disclaimer, and a detachedsignatureobject: -
Post the ledger to the verifier endpoint. The detached credential lives inside the JSON itself — nothing else to download:
reasonis one ofok,content_mismatch(body edited after signing),signature_invalid(MAC does not match the content),unsupported_version(unknown credential version), ormalformed_ledger. -
Verify offline if you want the check independent of Orbit’s API: strip the
signaturefield, serialize the remaining body as canonical JSON (object keys sorted recursively), and SHA-256 the result — it must equalsignature.content_sha256. The MAC additionally requires the workspace’s signing key, so a tampered ledger can be detected by anyone, but producing the MAC is Orbit-side only.
Confirming the notice fired on a conversation
The per-turnmetadata.ai_generated: true flag proves the reply was AI-authored; it does not prove the disclosure notice was shown. Three surfaces answer “did the notice fire on this conversation?”:
- Read the conversation — on a text channel the chat notice is prepended to the agent’s first reply, so the notice text is visible verbatim in the conversation’s message list in the dashboard and via the conversations API. The same property holds for voice: the intro plays before the agent speaks, so a recorded call carries it at the start.
- Check the per-conversation timestamp — once the chat notice is delivered, the platform stamps
first_disclosure_sent_aton that conversation and the notice never repeats there. If you (or your compliance tooling) retain exports or warehouse snapshots of conversation records, a non-null value is durable proof the notice fired for that conversation. - Check the audit log for configuration changes — every change to the disclosure settings is recorded under the audit action
compliance.ai_disclosure_updated, and each dossier or ledger export is logged asagent.conformity_dossier.exportedoragent.ai_disclosure_ledger.exported. If a notice did not fire on a conversation you expected it to, the audit trail for those actions plus the conversation timestamp above isolates whether disclosure was off at the time, or the notice genuinely failed to send.
Posture matrix per regulation
All four regulations are tenant-owned configuration: Orbit ships the controls and the evidence exports; you decide which toggles apply to your traffic. Since the rules are workspace-wide opt-ins, enable every regulation your traffic plausibly touches.
Two cautions that apply to every row: the jurisdiction toggles do not geolocate contacts — they apply the rule workspace-wide — and the SB 243 reminder only ever fires for contacts you have explicitly flagged as a minor. Orbit never infers jurisdiction or minor status.
Known limitations
- Jurisdiction rules are workspace-wide opt-ins, not automatic per-contact geolocation — see the note above.
- TTS-embedded audio watermarking depends on the configured voice provider; not every provider supports it as of mid-2026.
- This page describes the transparency (Article 50) surface. It does not cover the EU AI Act’s separate high-risk-system (Annex III) obligations — see the pointer below.