Base oficial UE de ingredientes cosméticos

La base CosIng, al día mediante patches firmados incrementales

CosIng es el inventario oficial de la Comisión Europea de ingredientes cosméticos: nombres INCI, números CAS, EINECS, IUPAC y las restricciones del Reglamento 1223/2009 Anexos II a VI. BD-API ingiere la fuente oficial, produce un patch SQL verificado en cada cambio, y lo entrega a tu instalación con integridad SHA-256, changelog versionado y traza completa de auditoría.

Comisión Europea · DG GROW

Qué es CosIng — y por qué descargar el XLS no alcanza

CosIng es el inventario oficial de la Comisión Europea de ingredientes cosméticos. Mantenido por DG GROW, lista nombres INCI, números CAS y EINECS, química IUPAC, funciones declaradas y — lo que más importa para el cumplimiento — las restricciones definidas en los Anexos II a VI del Reglamento (CE) 1223/2009. La fuente es autoritativa. El formato de entrega no es operativo.

El XLS oficial entrega

Un snapshot estático, descargado a mano

  • Nombre INCI, CAS, EINECS, IUPAC y referencias Ph. Eur.
  • Funciones declaradas por ingrediente
  • Referencias cruzadas Anexos II-VI con texto de restricción
  • Un único archivo .xls que hay que descargar desde ec.europa.eu

El XLS oficial NO entrega

Nada de lo que un flujo operativo realmente necesita

  • Un changelog estructurado de qué cambió entre versiones
  • Un diff entre ayer y hoy, versión por versión
  • Una API REST, un contrato OpenAPI o salida JSON
  • Un webhook el día que se añade una sustancia al Anexo II
  • Prueba criptográfica de integridad del archivo recibido

Lo que BD-API agrega encima

Una capa de entrega firmada y versionada sobre la fuente oficial

  • Patches SQL incrementales que tu PostgreSQL aplica en una sola transacción
  • changelog.json + meta.json describiendo cada sustancia tocada
  • Integridad SHA-256 del patch y firma HMAC-SHA256 en webhooks
  • Una línea de tiempo de versiones consultable para auditoría
  • Polling diario contra la fuente de la Comisión Europea
Si tu flujo operativo necesita algo de esto, el XLS solo no alcanza. Ese hueco — entre una fuente autoritativa y una integración operativa — es exactamente lo que BD-API cierra.

Tecnología detrás de BD-API

Flujos independientes para mantener datos, alertas, integración y resiliencia bajo control.

BD-API corre en infraestructura FluxorHub.com y entrega actualizaciones verificables a la plataforma del cliente. Si un flujo se demora, los otros siguen funcionando: la base local nunca depende de una conexión permanente para validar.

Fuente oficial

CosIng oficial UE (.xls)

Entrada regulatoria monitoreada y versionada antes de tocar cualquier sistema del cliente.

Motor BD-API

  • Sync programado con CosIng UE
  • Diff Engine
  • patch.sql incremental
  • changelog.json + meta.json

Entrega al cliente

Integración controlada

La plataforma consulta /api/versions/check con la frecuencia que elija, descarga el patch si hay versión nueva, valida SHA-256 y aplica todo en una transacción PostgreSQL.

Resultado operativo

Base regulatoria actualizada, rollback automático si algo falla y evidencia clara de cada cambio.

Anatomía de un patch CosIng

Qué hay dentro de cada patch que envía BD-API

Cada release es un bundle chico: un patch SQL transaccional, un changelog estructurado, un archivo de metadata con el hash de integridad y una firma HMAC en la descarga. Abajo va un ejemplo realista — y a propósito simplificado — de lo que recibe tu cliente.

patch.sql

SQL transaccional, sólo UPSERT

Envuelto en BEGIN / COMMIT. Basado en UPSERT, así que re-aplicarlo es seguro. Si algo falla a mitad, hace rollback y tu versión anterior queda intacta.

-- patch.sql — applied in a single PostgreSQL transaction
BEGIN;

-- Add a newly prohibited substance (Annex II, position 1.629)
INSERT INTO cosing_substances (
  cosing_ref, inci_name, cas_number, einecs_number, annex, position, updated_at
) VALUES (
  'COS-93412', 'Butylphenyl Methylpropional', '80-54-6', '201-289-8',
  'II', 1629, '2026-05-12T08:00:00Z'
)
ON CONFLICT (cosing_ref) DO UPDATE
   SET annex      = EXCLUDED.annex,
       position   = EXCLUDED.position,
       updated_at = EXCLUDED.updated_at;

-- Update an existing Annex III restriction (max concentration in leave-on)
UPDATE cosing_substances
   SET restriction_max_concentration_leave_on = '0.0015',
       updated_at = '2026-05-12T08:00:00Z'
 WHERE cosing_ref = 'COS-31207';

COMMIT;

changelog.json

Diff estructurado de los cambios

Resumen procesable de altas, modificaciones y bajas. Alimenta tu cola de revisión interna sin tener que parsear SQL.

{
  "version": "2026.05.12",
  "previous_version": "2026.04.28",
  "generated_at": "2026-05-12T08:00:00Z",
  "summary": {
    "added": 3,
    "modified": 17,
    "deprecated": 0
  },
  "changes": [
    {
      "type": "added",
      "cosing_ref": "COS-93412",
      "inci_name": "Butylphenyl Methylpropional",
      "annex": "II",
      "reason": "Listed in Commission Regulation (EU) 2026/411"
    },
    {
      "type": "modified",
      "cosing_ref": "COS-31207",
      "field": "restriction_max_concentration_leave_on",
      "from": "0.0030",
      "to": "0.0015"
    }
  ]
}

meta.json

Versión, fuente, integridad

Sello de versión, URL de la fuente oficial y timestamp de la descarga, hash SHA-256 y la versión mínima de cliente necesaria para aplicar el patch sin problemas.

{
  "version": "2026.05.12",
  "released_at": "2026-05-12T08:00:00Z",
  "source": {
    "name": "EU CosIng — official inventory",
    "url": "https://ec.europa.eu/growth/tools-databases/cosing/",
    "fetched_at": "2026-05-12T05:42:11Z"
  },
  "integrity": {
    "algorithm": "SHA-256",
    "hash": "9f3b4c2e1a08d5e7f1c2b3a4d5e6f70819a2b3c4d5e6f70819a2b3c4d5e6f708"
  },
  "size_bytes": 18742,
  "min_client_version": "1.4.0"
}

Por qué importa

Cada patch es auditable. Si una autoridad regulatoria pregunta "¿qué cambió y cuándo lo aplicaron?", la respuesta está en la metadata del patch — no en el inbox de nadie.

Reglamento (CE) 1223/2009 · Anexos II-VI

Cobertura completa de los Anexos CosIng II a VI

Cada Anexo CosIng gobierna una pregunta de cumplimiento distinta que tu Persona Responsable tiene que responder. BD-API ingiere los cinco y entrega cada cambio dentro del mismo patch. Los conteos de abajo reflejan la base de producción actual — se actualizan en cada release CosIng.

Anexo II

Sustancias prohibidas

II

Sustancias prohibidas en productos cosméticos puestos en el mercado UE.

1.758

entradas actualmente trackeadas

La primera lista que cruza cualquier reformulación. Pegar contra Anexo II significa que el producto no puede comercializarse hasta que se quite la sustancia.

Anexo III

Sustancias restringidas

III

Sustancias permitidas únicamente bajo condiciones específicas — límites de concentración, tipos de producto, advertencias, casos de uso permitidos.

381

entradas actualmente trackeadas

Donde sucede el grueso del trabajo operativo de cumplimiento. Una sustancia puede ser legal al 0,1% en aclarado e ilegal a la misma concentración en sin-aclarado.

Anexo IV

Colorantes permitidos

IV

Lista exhaustiva de colorantes permitidos en productos cosméticos, con restricciones por campo de aplicación.

154

entradas actualmente trackeadas

Un colorante que no está en el Anexo IV no está permitido. El PIF debe justificar cada colorante contra esta lista y sus condiciones de uso.

Anexo V

Conservantes permitidos

V

Sustancias añadidas a productos cosméticos con el propósito principal de inhibir el desarrollo microbiano.

58

entradas actualmente trackeadas

Define la estrategia microbiológica: qué conservantes están permitidos, a qué concentración máxima, en qué categorías de producto.

Anexo VI

Filtros UV permitidos

VI

Sustancias específicamente autorizadas para filtrar la radiación UV en productos cosméticos.

34

entradas actualmente trackeadas

Lista muy controlada. Los dictámenes SCCS nuevos y los reglamentos modificativos caen más seguido acá — y tienen que reflejarse en tus formulaciones activas.

Conteos según la última release CosIng ingerida por BD-API. Cada cambio se entrega como patch SQL incremental; nada se reconstruye desde cero.

Explorá la base CosIng

Encontrá ingredientes, anexos y categorías regulatorias

Buscá por INCI o CAS, navegá por anexo II–VI del Reglamento UE 1223/2009, filtrá por función técnica o consultá las categorías especiales (CMR, alérgenos, microplásticos).

Categorías especiales

Integridad · Firmas · Auditoría

Cada patch está firmado. Cada versión es auditable.

El cumplimiento no es un feature que se pega al final — es el contrato entre BD-API y tu instalación. Tres primitivas sostienen ese contrato: integridad del patch, firmas de webhook y un historial de versiones consultable.

1

Integridad SHA-256 del patch

Verificá el patch antes de aplicarlo

Cada patch viene con su hash SHA-256 dentro de meta.json y en la cabecera de respuesta de la descarga. Tu cliente recomputa el hash localmente y se niega a aplicar si no coincide.

# 1. Download the patch and its metadata
curl https://api.bdapi.app/api/versions/2026.05.12/patch \
  -H "Authorization: Bearer $LICENSE_KEY" \
  -o patch.sql.zip

EXPECTED=$(curl -s https://api.bdapi.app/api/versions/2026.05.12/meta \
  -H "Authorization: Bearer $LICENSE_KEY" \
  | jq -r '.integrity.hash')

# 2. Compute the local hash and compare BEFORE applying
ACTUAL=$(sha256sum patch.sql.zip | awk '{print $1}')

if [ "$EXPECTED" = "$ACTUAL" ]; then
  echo "Integrity OK — safe to apply"
else
  echo "Integrity FAILED — do NOT apply"; exit 1
fi
2

Firma HMAC-SHA256 de webhook

No confíes en nada hasta que X-BDAPI-Signature dé OK

Las entregas de webhook llevan una firma HMAC-SHA256 en la cabecera X-BDAPI-Signature, computada sobre el cuerpo crudo exacto con tu secreto compartido. Sólo comparación en tiempo constante — nunca igualdad de cadena directa.

// Webhook receiver — verify X-BDAPI-Signature before trusting the payload
import crypto from 'node:crypto'

export function verifyWebhook(req, secret) {
  const received = req.headers['x-bdapi-signature']    // hex digest
  const rawBody  = req.rawBody                         // exact bytes BD-API signed

  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')

  // Constant-time comparison — never use === on signatures
  const ok = crypto.timingSafeEqual(
    Buffer.from(received, 'hex'),
    Buffer.from(expected, 'hex'),
  )

  if (!ok) throw new Error('Invalid BD-API signature')
}
3

Traza de auditoría

Respondé a "¿qué versión se aplicó y cuándo?"

Cada aplicación de patch exitosa queda registrada con su versión, la URL de la fuente, el hash de integridad y el actor que la disparó. Una sola consulta SQL devuelve el timeline completo que pediría una autoridad regulatoria.

-- Audit trail: every CosIng version applied between two dates,
-- with the integrity hash you verified at apply time.
SELECT
  version,
  applied_at,
  source_url,
  integrity_hash,
  applied_by
FROM   bdapi_versions
WHERE  applied_at BETWEEN '2026-01-01' AND '2026-05-31'
ORDER  BY applied_at DESC;

No son add-ons opcionales. Son la forma en que BD-API se gana el derecho a sentarse entre una fuente UE autoritativa y tu base de datos de producción.

Preguntas sobre CosIng

Preguntas sobre el servicio de actualización CosIng

¿BD-API hospeda la base CosIng oficial o solo un snapshot?+

BD-API ingiere el XLS oficial de CosIng publicado por la Comisión Europea, lo parsea y produce una representación PostgreSQL verificada que tu instalación cliente recibe vía patches SQL incrementales. La fuente oficial sigue siendo la EC; BD-API es la capa de entrega estructurada, versionada y firmada.

¿Con qué frecuencia se refresca CosIng dentro de BD-API?+

El poll de CosIng corre con CRON configurable por ambiente (hasta diario). Cuando la EC publica un XLS nuevo, el diff engine produce un patch en minutos. Tu cliente puede consultar /api/versions/check con la frecuencia que prefiera. Cómo es el ritmo real de actualización de CosIng →

¿El patch sobrescribe destructivamente mi data CosIng existente?+

No. Los patches son UPSERT y corren en una sola transacción PostgreSQL. Si algo falla durante el apply, la transacción hace rollback y tu versión anterior queda intacta.

¿Cómo verifico que un patch no haya sido manipulado?+

Cada patch viene con un hash SHA-256 en su metadata. Tu cliente descarga el patch, computa el hash localmente y compara contra el metadata antes de aplicar. Las notificaciones webhook llevan firma HMAC-SHA256 que verificás con tu secreto compartido.

¿Puedo suscribirme solo a actualizaciones CosIng sin la vigilancia multi-fuente?+

Sí. El plan Standard incluye actualizaciones CosIng y alertas SCCS / DG SANTE en formato crudo. El plan Premium agrega la vigilancia multi-fuente enriquecida con IA (Safety Gate, EUR-Lex) con suscripción granular.

¿Qué hace profesional una fuente de datos CosIng frente a un simple descargador de XLS?+

Tres cosas. Primero, diffs incrementales firmados en lugar de descargas completas del XLS — solo aplicas lo que cambió, con integridad criptográfica. Segundo, una representación PostgreSQL estructurada en vez de celdas crudas, con relaciones entre Anexos, sustancias y números CAS. Tercero, eventos de cambio trazables — cada modificación lleva fuente, marca temporal y prueba verificable, que es lo que los auditores piden. Un descargador te da un archivo; un servicio profesional te da evidencia de cumplimiento. Siete criterios para evaluar una fuente de datos CosIng →

¿Cuál es la diferencia entre el Anexo II y el Anexo III de CosIng?+

El Anexo II lista sustancias prohibidas — ingredientes que no pueden usarse en productos cosméticos a ninguna concentración; contiene hoy más de 1.700 entradas. El Anexo III lista sustancias restringidas — ingredientes permitidos solo bajo condiciones específicas: concentración máxima, tipo de producto, advertencias requeridas en el etiquetado o usos excluidos. Una sustancia que pasa del Anexo III al Anexo II convierte un producto conforme en no conforme de la noche a la mañana, que es el escenario de retirada más común motivado por los Anexos. Los cinco Anexos CosIng explicados con ejemplos →

Dejá de perseguir descargas XLS. Empezá a recibir patches firmados.

Solicitar acceso