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/searchBú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/minGET /api/public/cosing/statsCounts 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/minGET /api/public/cosing/ingredient/:slugDetalle completo del ingrediente: nombre INCI, CAS, número EC, funciones, restricciones de Anexos y referencias cruzadas.
120 req/minGET /api/public/cosing/ingredients/slugsTodos los slugs de ingredientes con fecha de última actualización — pensado para generadores de sitios estáticos y sitemaps.
10 req/minGET /api/public/cosing/annex/:code/ingredientsListado paginado de ingredientes de un Anexo — code es ii, iii, iv, v o vi.
60 req/minGET /api/public/cosing/cmrSustancias con clasificación CMR (carcinogénicas, mutagénicas o reprotóxicas).
60 req/minGET /api/public/cosing/recently-prohibitedSustancias agregadas al Anexo II en los últimos N meses (?months=1–24, por defecto 6), con fechas de actualización.
60 req/minGET /api/public/watch/latestÚltimos eventos regulatorios de DG SANTE, SCCS, EUR-Lex y Safety Gate, con URLs a la fuente oficial.
60 req/minTodas 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.
| BD-API CosIng API | Descarga del .xls oficial | APIs de consulta de ingredientes | |
|---|---|---|---|
| Actualización | Sincronización automática en cada cambio de XLS de la EC (CRON, semanal por defecto, hasta diario) | Re-descarga manual necesaria — notás cambios solo cuando revisás | Variable; frecuentemente con días o semanas de retraso sobre la fuente oficial |
| Integridad | Patches firmados SHA-256 + notificaciones webhook con firma HMAC-SHA256 | Ninguna — sin hash, sin firma, sin forma de detectar manipulación | Ninguna a nivel de datos |
| Formato | PostgreSQL estructurado con FK entre Anexos, sustancias y números CAS | Celdas de hoja de cálculo crudas — columnas que cambian entre versiones | JSON por request — una consulta a la vez, sin estructura relacional |
| Entrega | Patches incrementales firmados aplicados dentro de una sola transacción SQL | Descarga del archivo completo cada vez, aunque haya cambiado una sola fila | Un ingrediente por llamada a la API — sin batch, sin sincronización |
| Trazabilidad | Fuente, marca temporal y prueba verificable por cambio — lo que exigen los auditores | Ninguna — no podés probar cuándo recibiste los datos ni qué cambió | Ninguna a nivel de datos |
| Diseñado para | Vendors de software cosmético que necesitan CosIng en vivo en su producto | Consultas humanas puntuales por equipos de asuntos regulatorios | Apps B2C y puntuaciones de seguridad de ingredientes para usuarios finales |
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
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
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
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
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
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 →