Qué exige el artículo 50 del AI Act a los equipos que construyen productos generativos, y cómo implementarlo sin parar el roadmap.
Nota. Este post es una guía técnica, no asesoramiento legal. La clasificación concreta de vuestro sistema (si sois proveedor, si aplica alguna exención) merece una revisión con vuestro equipo legal. Lo que sí podemos hacer desde ingeniería es tener el sistema preparado y la evidencia documentada.
Hasta hace poco, "marcar el contenido generado por IA" sonaba a algo que harían OpenAI, Google o Anthropic en sus modelos y que al resto no nos tocaba. Eso cambió el 2 de agosto de 2026, cuando empezaron a aplicarse las obligaciones de transparencia del artículo 50 del Reglamento de IA de la UE (AI Act). Y tiene una fecha que muchos equipos aún no tienen en el calendario: el 2 de diciembre de 2026, cuando termina el periodo transitorio para marcar el contenido de los sistemas generativos que ya estaban en el mercado antes de agosto.
Si vuestro producto genera texto, imágenes, audio o vídeo que ven personas en la UE, es muy probable que esto os afecte, aunque no hayáis entrenado ningún modelo y todo pase por una API de terceros. Este post explica qué pide la norma en términos de ingeniería, dónde están las trampas (casi todas en el pipeline, no en el modelo) y qué haríamos en el mes que queda.
Este es el tercer post de nuestra serie sobre buenas prácticas en productos de IA. El anterior cubría cómo blindar el gateway de LLM; hoy vemos el marcado de salidas sintéticas bajo el artículo 50 antes del plazo de diciembre.
1. Qué exige el artículo 50, en cuatro obligaciones
El artículo 50 agrupa varias obligaciones distintas, con destinatarios distintos. Conviene separarlas porque cada una se resuelve en una capa diferente del producto:
| Obligación | Quién | Qué hay que hacer | Desde |
|---|---|---|---|
| 50(1) Informar de que se interactúa con una IA | Proveedor | Avisar a la persona de que habla con un sistema de IA (chatbots, agentes, avatares), salvo que sea obvio | 2 ago. 2026 |
| 50(2) Marcar el contenido generado | Proveedor | Marcas legibles por máquina en texto, imagen, audio y vídeo sintéticos, y que sean detectables | 2 ago. 2026 (sistemas nuevos) / 2 dic. 2026 (sistemas ya en el mercado antes del 2 de agosto) |
| 50(3) Informar de reconocimiento de emociones o categorización biométrica | Responsable del despliegue | Avisar a las personas expuestas | 2 ago. 2026 |
| 50(4) Etiquetar deepfakes y texto de interés público | Responsable del despliegue | Etiqueta visible o audible, perceptible sin herramientas | 2 ago. 2026 |
Tres detalles que suelen pasarse por alto:
- El periodo transitorio solo cubre el marcado del 50(2). El AI Omnibus (Reglamento (UE) 2026/1744) dio margen hasta el 2 de diciembre únicamente a los sistemas generativos que ya estaban en el mercado antes del 2 de agosto, y solo para el marcado y la detección. Si vuestro chatbot es en parte interactivo y en parte generativo, el aviso de "estás hablando con una IA" ya tendría que estar desde agosto.
- No hay que marcar retroactivamente el contenido generado antes del 2 de agosto. Pero si un texto generado antes se publica después, sí entra.
- Las multas por incumplir las obligaciones de transparencia pueden llegar a 15 millones de euros o al 3 % de la facturación mundial anual, con criterios de proporcionalidad para pymes. La supervisión es sobre todo de las autoridades nacionales de vigilancia del mercado; la Oficina de IA solo actúa en casos concretos, como cuando el mismo proveedor ofrece el modelo de uso general y el sistema construido sobre él.
Además, la Comisión ha publicado dos documentos que concretan todo esto: las Directrices sobre el artículo 50 (adoptadas el 20 de julio de 2026) y el Código de Buenas Prácticas sobre transparencia del contenido generado por IA (versión final del 10 de junio de 2026), que firmaron unas 190 organizaciones, entre ellas los grandes proveedores de modelos. Ninguno es vinculante, pero el Código es la vía más clara para demostrar cumplimiento: quien no lo firma tiene que justificar por otros medios que sus medidas son adecuadas.
2. "Pero si yo solo llamo a una API": por qué probablemente eres proveedor
Esta es la pregunta que más nos hacen los equipos con los que trabajamos, y la respuesta corta es incómoda.
El AI Act define como proveedor a quien desarrolla un sistema de IA (o lo encarga) y lo pone en el mercado o en servicio con su propio nombre o marca. Como explica Bird & Bird en su análisis, llamar a una API no es en sí la línea divisoria: lo que te convierte en proveedor es haber construido un sistema distinto alrededor del modelo y ofrecerlo bajo tu nombre, incluso si solo lo usa tu propia plantilla. Un asistente de redacción con tu marca, un generador de informes para clientes o un agente de atención al cliente encajan ahí.
La buena noticia es que las Directrices permiten que el marcado lo haga otro: el proveedor puede apoyarse en la solución de marcado del proveedor del modelo o de un tercero "en la medida en que dicha solución cumpla el artículo 50(2)". La mala es la frase siguiente: ese apoyo "se entiende sin perjuicio de la responsabilidad del proveedor del sistema de IA de demostrar el cumplimiento" (apartado 74). Lo mismo vale para la detección: si dependes de otro para ofrecerla, tienes que asegurarte de que cumple (apartado 78).
En la práctica, eso significa tres cosas:
- No basta con suponer que tu proveedor marca. Los proveedores de modelos de uso general solo están animados a marcar a nivel de modelo, no obligados. Hay que comprobarlo, por modelo y por canal.
- Tu pipeline puede borrar la marca aunque el modelo la ponga. Lo vemos en la sección 4.
- Necesitas evidencia: qué técnica usas, por qué, cómo lo verificaste. Las Directrices y los análisis jurídicos insisten en documentar la elección técnica, porque ese razonamiento es tu prueba.
3. Qué queda fuera (y qué no tanto)
Antes de marcar nada, conviene acotar. Las Directrices excluyen del 50(2):
- Secuencias cortas de números, símbolos o letras: palabras sueltas, pies de imagen, texto alternativo, etiquetas de interfaz.
- Código fuente, incluidos SQL, infraestructura como código, YAML o configuraciones JSON, y los comentarios que forman parte del código.
- Salidas máquina a máquina que ninguna persona llega a ver, como la comunicación entre agentes.
- Flujos cerrados de producción (por ejemplo, en cine o videojuegos), salvo la salida final.
Y el Código añade un umbral concreto para texto: la marca de agua es obligatoria en texto libre de más de 200 tokens; por debajo no se exige.
Hay además una exención "B2B" que muchos equipos leen más amplia de lo que es. Según el apartado 87 de las Directrices, solo aplica si se cumplen las tres condiciones a la vez:
- La salida es estrictamente técnica (diseños de ingeniería, instrucciones técnicas, documentación interna de procesos...).
- Solo la ve un grupo limitado y predefinido de profesionales dentro de las organizaciones del proveedor y del responsable del despliegue.
- No está pensada para salir de la empresa, con salvaguardas que lo impidan (aislamiento, control de acceso por roles).
Los sistemas orientados al público o a consumidores quedan expresamente fuera. Un SaaS que genera textos que el cliente luego envía a sus propios clientes no encaja aquí.
4. Cómo marcar, por tipo de contenido
El Código pide, en general, al menos dos capas de marcado legible por máquina (por ejemplo, metadatos firmados más una marca de agua imperceptible), porque ninguna técnica por sí sola cumple hoy los cuatro requisitos de eficacia, interoperabilidad, robustez y fiabilidad. Hay dos excepciones en las que basta una capa, y una de ellas es justo el texto libre, que no puede llevar metadatos.
4.1 Texto: la marca vive en el muestreo
Una marca de agua de texto no añade caracteres ocultos. Modifica de forma estadística cómo el modelo elige entre tokens posibles, siguiendo una clave secreta, y un detector con la misma clave busca ese patrón después. Consecuencia directa para ingeniería: solo puede ponerla quien controla la generación. Si usáis un modelo por API, depende del proveedor; si autoalojáis, os toca a vosotros.
Si usáis APIs de terceros, el estado a día de hoy es desigual, y conviene revisarlo modelo a modelo:
- OpenAI anunció el 5 de octubre su marca de agua de texto (textGrain). En la API está desactivada por defecto: hay que activarla en la configuración de la organización (Data controls > Text provenance) o del proyecto, y elegir los modelos. Si no habéis tocado nada, vuestras salidas de la API de OpenAI probablemente no llevan marca.
- Anthropic aplica la marca a nivel de modelo, en todas sus superficies y regiones, para los modelos compatibles, y está añadiéndola a modelos anteriores al 2 de agosto. Hay que comprobar en su tabla si el modelo concreto que usáis está cubierto, incluido el canal (API directa o nube).
- Google: en el foro oficial de desarrolladores, Google ha confirmado que el texto de la API de Gemini lleva SynthID, después de haber dicho inicialmente lo contrario. Mientras no esté en la documentación, lo trataríamos como algo a confirmar por escrito con el proveedor.
Si autoalojáis modelos abiertos, Hugging Face Transformers incluye una implementación de SynthID Text que se activa en la generación:
from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, padding_side="left")
model = AutoModelForCausalLM.from_pretrained(MODEL_ID)
# Las claves son un secreto: se cargan de un gestor de secretos, nunca del repo.
watermarking_config = SynthIDTextWatermarkingConfig(
keys=load_watermark_keys(), # lista de enteros, una por profundidad
ngram_len=5,
)
inputs = tokenizer([prompt], return_tensors="pt", padding=True)
out = model.generate(
**inputs,
watermarking_config=watermarking_config,
do_sample=True, # la marca actúa sobre el muestreo
max_new_tokens=512,
)Las claves de la marca de agua pasan a ser un secreto más de producción: quien las tenga puede detectar vuestra marca y, potencialmente, falsificarla. Tratadlas como las API keys del gateway.
Lo que hay que saber de las limitaciones, porque lo vais a tener que explicar a negocio. OpenAI ha publicado cifras de su propio sistema que ilustran bien el problema:
- Con una tasa objetivo de falsos positivos del 1 %, detectó la marca en torno al 80 % de los pasajes de 200 tokens y en torno al 95 % de los de 400, en contenido como psicología; en matemáticas, mucho menos.
- Sustituir por sinónimos el 10 % de las palabras de un pasaje de 400 tokens bajó la detección de alrededor del 92 % al 66 %; sustituir el 25 %, al 17 %.
- En su prueba con las 24 lenguas oficiales de la UE, el español fue la que mejor detección dio (69 %) antes de ajustar la intensidad de la marca.
Es decir: la marca de agua de texto es una señal, no una prueba. Ni su presencia demuestra autoría ni su ausencia demuestra que lo escribió una persona.
4.2 La trampa está en vuestro pipeline, no en el modelo
Esta es la parte que más nos preocupa como equipo que lleva estos sistemas a producción. Muchos productos no devuelven la salida del modelo tal cual. Pasan por pasos intermedios que destruyen la marca sin que nadie se dé cuenta:
- Un segundo modelo que "reescribe" o "pule" la respuesta. Si ese modelo no marca (un modelo pequeño autoalojado para abaratar, por ejemplo), la salida final no lleva marca, aunque el primero sí la pusiera.
- Traducción automática posterior con otro sistema.
- Plantillas que trocean y recomponen texto generado en fragmentos cortos.
- Optimizadores de imagen y CDNs que redimensionan, convierten a WebP o AVIF y eliminan metadatos por defecto.
Si un paso de vuestro pipeline transforma sustancialmente la salida con un modelo, ese paso también es generación y tiene que marcar. Y si un paso no es un modelo pero toca el contenido (una CDN, un conversor), hay que comprobar que conserva las marcas.
4.3 Imágenes, audio y vídeo: metadatos firmados más marca de agua
Para medios, el patrón que piden el Código y que ya usan los grandes proveedores son dos capas:
- Metadatos firmados y con sello de tiempo, de forma segura y a prueba de manipulación. El estándar de facto es C2PA (Content Credentials).
- Una marca de agua imperceptible en el propio contenido, que sobreviva cuando los metadatos se pierden (capturas de pantalla, conversiones). C2PA permite enlazar ambas, de modo que la marca de agua ayude a recuperar las credenciales si se eliminan.
Si generáis imágenes con la API de OpenAI o con Claude, ya llevan C2PA (y, en el caso de OpenAI, también SynthID). Lo que tenéis que garantizar es que vuestro pipeline no las borre y, si generáis o editáis medios vosotros mismos, añadirlas. Con la librería oficial c2pa-python, marcar una imagen como creada por un modelo generativo es así:
from c2pa import Builder, C2paBuilderIntent, C2paDigitalSourceType
# El signer usa vuestro certificado de firma, idealmente guardado en un KMS/HSM.
with Builder({}) as builder:
builder.set_intent(
C2paBuilderIntent.CREATE,
C2paDigitalSourceType.TRAINED_ALGORITHMIC_MEDIA, # "generado por IA"
)
with open("generated.jpg", "rb") as source, open("signed.jpg", "wb") as dest:
builder.sign(signer, "image/jpeg", source, dest)Y un test de CI barato que detecta el error más común, que la imagen servida ya no lleve las credenciales:
#!/usr/bin/env sh
# check-c2pa-survives.sh: genera una imagen de prueba, la pasa por el mismo
# pipeline que en producción (resize, conversión, CDN) y comprueba que el
# manifiesto C2PA sigue ahí. Adaptad la salida a vuestra versión de c2patool.
set -eu
./scripts/generate-test-image.sh > /tmp/in.jpg
./scripts/run-image-pipeline.sh /tmp/in.jpg /tmp/out.webp
if ! c2patool /tmp/out.webp > /tmp/manifest.json 2>/dev/null; then
echo "FALLO: la imagen procesada ya no tiene manifiesto C2PA" >&2
exit 1
fi
grep -q "trainedAlgorithmicMedia" /tmp/manifest.json \
|| { echo "FALLO: el manifiesto no declara contenido generado por IA" >&2; exit 1; }5. Detectable no es lo mismo que marcado
El artículo 50(2) pide que el contenido sea detectable, no solo marcado. Las Directrices lo traducen en que los medios de detección tienen que estar al alcance de las personas expuestas al contenido, con resultados comprensibles para una persona. El Código concreta más:
- El proveedor tiene que ofrecer una solución de detección, en principio gratuita, alojada en la UE o ejecutable en local, y conforme al RGPD.
- Los proveedores con menos de un millón de usuarios mensuales cuya detección tenga costes operativos importantes pueden cobrar una tarifa razonable cuando un mismo usuario supera un volumen razonable de consultas. Autoridades, medios, verificadores e investigadores siempre tienen acceso libre.
- Antes del 2 de febrero de 2027, la detección de marcas de agua tiene que ser interoperable entre proveedores (por ejemplo, mediante una API estándar, una "señal" legible que indique qué detector usar, o un detector compartido).
Aquí hay un hueco real que conviene conocer: hoy, los detectores de texto de los grandes proveedores tienen el acceso restringido. OpenAI limita su detector de texto a organizaciones de investigación aprobadas, y Anthropic tiene su API de detección en preview privada, aunque la abre también a empresas obligadas a verificar la marca para su propio cumplimiento. Para imágenes y audio, OpenAI sí ofrece una API pública de verificación. Si vuestro sistema depende de la marca de un proveedor, documentad cómo accederá a la detección quien la necesite, y solicitad el acceso que corresponda.
6. La capa de procedencia: cómo lo montaríamos
Lo que mejor nos funciona es tratar el marcado como una capa explícita del pipeline de salida, con una decisión por cada contenido generado y un registro de por qué. Algo así:
from dataclasses import dataclass
from enum import Enum
class Modality(Enum):
TEXT = "text"
IMAGE = "image"
AUDIO = "audio"
VIDEO = "video"
CODE = "code"
@dataclass(frozen=True)
class GeneratedOutput:
modality: Modality
token_count: int | None
audience: str # "public", "customer", "internal_restricted", "machine"
produced_by: str # modelo y versión exactos
upstream_marks: set[str] # p. ej. {"provider_text_watermark", "c2pa"}
def marking_plan(out: GeneratedOutput) -> dict:
"""Decide qué marcas exige la política y deja el motivo registrado."""
if out.modality is Modality.CODE:
return {"required": [], "reason": "código fuente: fuera del art. 50(2)"}
if out.audience == "machine":
return {"required": [], "reason": "máquina a máquina, sin exposición humana"}
if out.audience == "internal_restricted":
# La exención B2B exige las tres condiciones del apartado 87.
# No la decide el código: la valida legal y se configura por sistema.
return {"required": [], "reason": "exención B2B validada (ref. ADR-xxx)"}
if out.modality is Modality.TEXT:
if (out.token_count or 0) <= 200:
return {"required": [], "reason": "texto corto (≤200 tokens), sin marca de agua obligatoria"}
return {"required": ["text_watermark"], "reason": "texto libre >200 tokens"}
# Imagen, audio y vídeo: dos capas.
return {"required": ["c2pa_signed", "invisible_watermark"], "reason": "medio sintético"}
def enforce(out: GeneratedOutput) -> None:
plan = marking_plan(out)
missing = set(plan["required"]) - normalize(out.upstream_marks)
audit_log(output=out, plan=plan, missing=missing)
if missing:
apply_or_block(out, missing) # marcar aquí o no publicarLas piezas importantes no son el código en sí, sino las decisiones que fuerza:
- Inventario por modelo y por canal.
produced_byyupstream_markssalen de una tabla mantenida a mano y verificada: qué modelos marcan, desde cuándo, con qué técnica, y qué canal (API directa, Bedrock, Vertex, Azure). Esta tabla es vuestra evidencia, y se parece mucho al inventario (AIBOM) del que hablamos en el post anterior de esta serie, sobre gateways de LLM. - Las exenciones se configuran, no se deducen. El código no debería decidir que algo es "B2B": esa clasificación se valida una vez, se documenta y se aplica por sistema.
- El gateway es buen sitio para esto. Si ya centralizáis las llamadas a modelos en un gateway, es el punto natural para fijar qué modelos pueden servir contenido de cara al público y comprobar que tienen el marcado activado.
7. No olvidéis el aviso del 50(1)
El aviso de interacción con IA es lo más sencillo de implementar y lo que más fácil se queda a medias. Las Directrices piden que se informe desde el principio de la primera interacción, de forma clara, distinguible y accesible, y advierten de que la excepción de "es obvio" debe interpretarse de forma restrictiva. En la práctica:
- Mostradlo en la primera pantalla del chat, no en los términos de uso.
- Que también lo anuncien los canales sin interfaz visual: voz, WhatsApp, email.
- Revisad los avatares y agentes con nombre propio y tono humano. Son justo los casos en los que "es obvio" deja de ser obvio.
8. Cinco errores que vemos venir
- Dar por hecho que el proveedor marca. En OpenAI, por ejemplo, está desactivado por defecto en la API.
- Comprobar en desarrollo y no en producción. El modelo, la región o el canal de nube cambian, y la cobertura del marcado también.
- Romper la marca en un paso intermedio: reescritura con otro modelo, traducción, optimización de imágenes.
- Ofrecer la exención B2B por defecto a un producto que acaba enviando contenido a terceros.
- No dejar rastro. Si llega un requerimiento, la pregunta será qué técnica usáis, por qué y cómo lo comprobasteis. Sin un registro, esa respuesta no existe.
Checklist: artículo 50 antes del 2 de diciembre
Alcance
- [ ] Tenemos la lista de sistemas que generan texto, imagen, audio o vídeo para personas en la UE, con su fecha de puesta en el mercado (antes o después del 2 de agosto de 2026).
- [ ] Para cada uno sabemos si somos proveedor, responsable del despliegue o ambos, y está validado con legal.
- [ ] Las exenciones (código, máquina a máquina, B2B del apartado 87) están documentadas por sistema, con sus tres condiciones cuando aplica la B2B.
Marcado
- [ ] Existe una tabla verificada de qué modelos y canales marcan el texto y cómo; en OpenAI, la marca de agua de texto está activada en la organización o el proyecto para los modelos que usamos.
- [ ] El texto libre de más de 200 tokens que llega a usuarios sale marcado, incluido el que pasa por pasos de reescritura o traducción.
- [ ] Las imágenes, audio y vídeo llevan dos capas: metadatos C2PA firmados y una marca de agua imperceptible.
- [ ] Un test de CI comprueba que las marcas sobreviven al pipeline real (resize, conversión, CDN).
- [ ] Las claves de marca de agua y los certificados de firma C2PA están en un gestor de secretos, con rotación y acceso mínimo.
- [ ] Los términos de uso prohíben eliminar las marcas.
Detección
- [ ] Sabemos cómo se detecta el contenido de cada sistema y quién puede acceder al detector; hemos solicitado acceso cuando dependemos del de un proveedor.
- [ ] Tenemos un plan para la interoperabilidad de la detección antes del 2 de febrero de 2027.
Interfaz y despliegue
- [ ] Los chatbots, agentes y avatares avisan de que son IA al inicio de la primera interacción, en todos los canales.
- [ ] Si publicamos deepfakes o texto de interés público sin revisión editorial, llevan una etiqueta visible o audible.
Evidencia
- [ ] Cada decisión de marcado queda registrada (sistema, modelo, técnica, motivo), y hay un documento que explica por qué elegimos esas técnicas.
Conclusión
El artículo 50 no prohíbe nada: pide transparencia. Pero la transparencia, en un producto real, es un problema de ingeniería. La marca no la pone "la IA": la pone un paso concreto de un pipeline concreto, y otro paso puede quitarla. Por eso no se resuelve con una línea en los términos de uso, sino con inventario, tests y registro, igual que cualquier otro requisito no funcional que importa.
Queda un mes para el 2 de diciembre. Es tiempo de sobra para inventariar, activar lo que vuestros proveedores ya ofrecen, poner un test en CI y documentar las decisiones. No lo es si se empieza la última semana.
Si queréis revisar cómo encaja vuestro producto en el artículo 50 desde el lado técnico (qué marca, dónde se pierde y qué evidencia tenéis), estaremos encantados de tener esa conversación. Sin pitch: una llamada de 30 minutos con uno de nuestros ingenieros.