CosIng API · Public REST endpoints · Signed SQL patches · Webhooks

API CosIng: la base de datos de ingredientes cosméticos UE, entregada como API en vivo

La base de datos CosIng UE (nombres INCI, números CAS, EINECS, restricciones Anexos II–VI) como API REST: endpoints públicos gratuitos para empezar hoy, y patches SQL firmados incrementales para producción. Para equipos que necesitan datos CosIng en su producto sin scrappear ec.europa.eu ni mantener su propio diff engine.

Sin API key

Consultá la base de datos CosIng en una llamada

Los endpoints públicos de lectura no requieren registro ni API key. Copiá, pegá, y tenés datos CosIng en vivo.

# Search the CosIng database by INCI name, CAS or EC number
curl "https://api.bdapi.app/api/public/cosing/search?q=phenoxyethanol&limit=1"

{
  "rows": [{
    "inci_name": "PHENOXYETHANOL",
    "cas_no": "122-99-6",
    "ec_no": "204-589-7",
    "function_names": ["ANTIMICROBIAL", "PRESERVATIVE"],
    "cosmetic_restriction": "V/29",
    "slug": "phenoxyethanol",
    "regulatory": { "annexes": [ /* Annex V entry, ref 29 */ ] }
  }],
  "total": 1
}

# Live substance counts per Annex (II-VI)
curl "https://api.bdapi.app/api/public/cosing/stats"

# Substances added to Annex II in the last 12 months
curl "https://api.bdapi.app/api/public/cosing/recently-prohibited?months=12"

Respuesta capturada de la API en vivo. La búsqueda cubre ingredientes regulados por defecto — agregá regulated_only=false para el inventario INCI completo.

Referencia

Endpoints públicos de lectura, con rate limits documentados

Ocho endpoints de solo lectura sobre la base CosIng y el feed de vigilancia regulatoria. Los límites son por IP y por minuto — publicados acá porque el software de producción merece conocer su presupuesto.

GET /api/public/cosing/search

Búsqueda por nombre INCI, número CAS y EC. Por defecto cubre ingredientes regulados (Anexos II–VI); pasá regulated_only=false para buscar en el inventario INCI completo.

60 req/min
GET /api/public/cosing/stats

Counts en vivo por Anexo (II–VI): sustancias, números CAS y totales de inventario — los mismos números que se muestran en este sitio.

30 req/min
GET /api/public/cosing/ingredient/:slug

Detalle completo del ingrediente: nombre INCI, CAS, número EC, funciones, restricciones de Anexos y referencias cruzadas.

120 req/min
GET /api/public/cosing/ingredients/slugs

Todos los slugs de ingredientes con fecha de última actualización — pensado para generadores de sitios estáticos y sitemaps.

10 req/min
GET /api/public/cosing/annex/:code/ingredients

Listado paginado de ingredientes de un Anexo — code es ii, iii, iv, v o vi.

60 req/min
GET /api/public/cosing/cmr

Sustancias con clasificación CMR (carcinogénicas, mutagénicas o reprotóxicas).

60 req/min
GET /api/public/cosing/recently-prohibited

Sustancias agregadas al Anexo II en los últimos N meses (?months=1–24, por defecto 6), con fechas de actualización.

60 req/min
GET /api/public/watch/latest

Últimos eventos regulatorios de DG SANTE, SCCS, EUR-Lex y Safety Gate, con URLs a la fuente oficial.

60 req/min

Todas las respuestas llevan headers Cache-Control aptos para CDN. Un 429 incluye retryAfter en segundos. Especificación OpenAPI 3.1 completa a pedido →

Casos de uso

Qué construyen los equipos con esto

Software de formulación cosmética y PLM

Validá listas INCI contra las restricciones de los Anexos II–VI dentro de tu propio producto. Prototipá con los endpoints públicos y después pasá al sync licenciado: una réplica PostgreSQL offline sin dependencia por request.

Certificadoras y consultores regulatorios

Consultá clasificaciones CMR, altas recientes en el Anexo II y condiciones de restricción de forma programática antes de firmar un expediente — con cada respuesta trazable a la fuente oficial de la EC.

Contenido, investigación y tooling interno

Alimentá glosarios de ingredientes, dashboards y sitios estáticos con counts de Anexos en vivo y detalle por ingrediente. Los headers de caché aptos para CDN lo hacen barato de consumir en build.

Producción

La API de sincronización licenciada: cuatro llamadas

Cuando el prototipo funciona, producción no debería depender de llamadas por request. La API licenciada replica el dataset CosIng completo en tu propio PostgreSQL con patches SQL firmados e incrementales.

# 1. Check whether a newer CosIng version exists
curl -X POST https://api.bdapi.app/api/versions/check \
  -H "Authorization: Bearer $LICENSE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"current_version": "1.0.0"}'

# 2. Download the signed incremental SQL patch
curl https://api.bdapi.app/api/versions/1.1.0/patch \
  -H "Authorization: Bearer $LICENSE_KEY" \
  -o patch.sql

# 3. Verify SHA-256 integrity before applying
curl -sI https://api.bdapi.app/api/versions/1.1.0/patch \
  -H "Authorization: Bearer $LICENSE_KEY" \
  | grep -i x-hash-sha256

# 4. Apply in a single PostgreSQL transaction, then confirm
psql -1 -f patch.sql && curl -X POST .../api/versions/confirm \
  -H "Authorization: Bearer $LICENSE_KEY" \
  -d '{"version":"1.1.0","success":true,"error":null}'

Si el hash no coincide, el apply no ocurre. Rollback automático si la transacción falla. Sin sorpresas.

Evaluación

API CosIng frente a las alternativas

Tres formas de acceder a los datos CosIng. Solo una está diseñada para producción.

Actualización

BD-API CosIng API

Sincronización automática en cada cambio de XLS de la EC (CRON, semanal por defecto, hasta diario)

Descarga del .xls oficial

Re-descarga manual necesaria — notás cambios solo cuando revisás

APIs de consulta

Variable; frecuentemente con días o semanas de retraso sobre la fuente oficial

Integridad

BD-API CosIng API

Patches firmados SHA-256 + notificaciones webhook con firma HMAC-SHA256

Descarga del .xls oficial

Ninguna — sin hash, sin firma, sin forma de detectar manipulación

APIs de consulta

Ninguna a nivel de datos

Formato

BD-API CosIng API

PostgreSQL estructurado con FK entre Anexos, sustancias y números CAS

Descarga del .xls oficial

Celdas de hoja de cálculo crudas — columnas que cambian entre versiones

APIs de consulta

JSON por request — una consulta a la vez, sin estructura relacional

Entrega

BD-API CosIng API

Patches incrementales firmados aplicados dentro de una sola transacción SQL

Descarga del .xls oficial

Descarga del archivo completo cada vez, aunque haya cambiado una sola fila

APIs de consulta

Un ingrediente por llamada a la API — sin batch, sin sincronización

Trazabilidad

BD-API CosIng API

Fuente, marca temporal y prueba verificable por cambio — lo que exigen los auditores

Descarga del .xls oficial

Ninguna — no podés probar cuándo recibiste los datos ni qué cambió

APIs de consulta

Ninguna a nivel de datos

Diseñado para

BD-API CosIng API

Vendors de software cosmético que necesitan CosIng en vivo en su producto

Descarga del .xls oficial

Consultas humanas puntuales por equipos de asuntos regulatorios

APIs de consulta

Apps B2C y puntuaciones de seguridad de ingredientes para usuarios finales

API CosIng

Preguntas sobre los datos y la entrega

¿Hay una API CosIng pública gratuita que pueda probar sin API key?+

Sí. Los endpoints de lectura bajo /api/public — búsqueda, stats, detalle de ingrediente, listados por Anexo, CMR, prohibiciones recientes y el feed de vigilancia regulatoria — no requieren API key ni registro. Tienen rate-limit por IP (de 10 a 120 requests por minuto según la ruta) y headers de caché aptos para CDN. La API licenciada suma lo que producción necesita: patches SQL incrementales firmados hacia tu propio PostgreSQL, webhooks y alertas por email.

¿Por qué la búsqueda pública no devuelve resultados para algunos ingredientes conocidos?+

Por defecto /cosing/search solo devuelve ingredientes cuya entrada en los Anexos II–VI está enlazada en la capa relacional — que es lo que necesita la mayoría de las consultas de cumplimiento. Algunas entradas del inventario, retinol entre ellas, están registradas bajo un registro de sustancia separado, por lo que no aparecen en el resultado por defecto. Pasá regulated_only=false para buscar en el inventario INCI completo de aproximadamente 33.000 entradas.

¿Qué devuelve exactamente la API CosIng?+

Cada sincronización devuelve un patch SQL incremental firmado: solo las filas que cambiaron desde tu versión actual. El patch contiene sentencias UPSERT para sustancias, números CAS, entradas EINECS y restricciones de Anexos (Anexos II–VI), más un hash SHA-256 en los headers de la respuesta. Lo aplicás en una sola transacción PostgreSQL y confirmás con una llamada de seguimiento. Nada se sobreescribe sin control — cada columna que cambió tiene traza de antes y después.

¿Cómo se mantiene sincronizado con el CosIng oficial?+

BD-API hace polling del XLS oficial de la Comisión Europea con un CRON configurable — semanal por defecto, configurable hasta diario. Cuando se publica un XLS nuevo, el diff engine corre en minutos, produce un patch SQL versionado y lo encola para entrega. Tu instalación hace polling a /api/versions/check con la frecuencia que querés — solo descargás cuando existe una versión más nueva.

¿Es una consulta por request o un dataset completo?+

Ninguna de las dos. Es incremental: en la primera sincronización recibís una base completa; en cada sincronización siguiente, solo lo que cambió. Tenés una réplica PostgreSQL en vivo del dataset CosIng completo — ~2.385 entradas en los Anexos II–VI — con claves foráneas entre Anexos, sustancias y números CAS. Sin cargo por consulta, sin round-trips en tiempo de request, sin sorpresas de rate-limit en producción. Explorar la base de datos CosIng →

¿Cómo verifico que la data no haya sido manipulada?+

Cada patch viene con un hash SHA-256 en el header x-hash-sha256 de la respuesta. Tu cliente descarga el patch, computa el hash localmente y compara antes de llamar a psql. Si los hashes no coinciden, el apply nunca ocurre. Las notificaciones webhook del pipeline de vigilancia llevan firma HMAC-SHA256 que verificás con tu secreto compartido antes de procesar.

¿Puedo alojar la data yo mismo?+

Sí — ese es el punto. Los patches son SQL puro en tu propio PostgreSQL. BD-API no tiene path de lectura a tu base, no hay SDK que deba quedar corriendo, no hay formato binario propietario. Si algún día dejás de usar BD-API, la data que ya aplicaste queda en tu base, intacta y queryable para siempre. Siete criterios para evaluar una fuente de datos CosIng →

¿Listo para poner los datos CosIng en tu producto?