{"openapi":"3.1.0","info":{"title":"Biological Secure™ / Atlas Engine API","version":"1.0.0","description":"API de datos endocrinos + flujo de prevención + certificación GOVP-1, servida en Cloudflare Workers sobre D1.\n\n**Alcance:** certifica la transparencia de las declaraciones y su nivel de evidencia (escala E0–E5). NO evalúa seguridad, eficacia, diagnóstico ni causalidad. No es consejo médico.\n\n**Autenticación:** token de consumo por producto vía `Authorization: Bearer <token>` (o `?token=`). Cada token tiene ámbitos (`scopes`) y cuota mensual; el consumo se contabiliza en D1 con trazabilidad (`usage_log`).\n\n**Ámbitos:** `prevencion` · `trazabilidad` · `farmacos` · `enfermedades` · `certificacion` · `*` (todos). Los endpoints públicos (`/salud`, `/certificar/verificar`, `/certificar/clave-publica`, `/.well-known/govp*`) no requieren token.","contact":{"name":"Biological Secure","url":"https://biologicalsecure.com"},"license":{"name":"Propietario"}},"servers":[{"url":"https://api.biologicalsecure.com","description":"Producción (dominio oficial)"},{"url":"https://biological-secure-api.gentle-shape-944e.workers.dev","description":"Producción (workers.dev)"}],"tags":[{"name":"Prevención","description":"dolencia → órgano → productos implicados (scope prevencion)"},{"name":"Trazabilidad","description":"rutas, evidencia, puentes, bioacumulación (scope trazabilidad)"},{"name":"Fármacos","description":"medicamentos y cruces medicamento↔disruptor (scope farmacos)"},{"name":"Enfermedades","description":"enfermedades Open Targets → agentes (scope enfermedades)"},{"name":"Certificación","description":"certificados GOVP-1 firmados (scope certificacion) + verificación pública"},{"name":"Descubrimiento","description":".well-known GOVP-1: identidad y records (público)"},{"name":"Meta","description":"estado del servicio (público)"}],"paths":{"/dolencias":{"get":{"summary":"Lista de dolencias con nº de agentes disruptores","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}]}},"/sistemas":{"get":{"summary":"Dolencias agrupadas por sistema fisiológico","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}]}},"/dolencia/{dolencia}":{"get":{"summary":"Dolencia → órgano → agentes disruptores (ordenados por evidencia)","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"dolencia","in":"path","required":true,"schema":{"type":"string"},"example":"sop_ovario_poliquistico","description":"clave de dolencia (ver GET /dolencias)"}]}},"/escanear":{"post":{"summary":"Escanea un estante de productos contra una dolencia","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShelfScanRequest"},"example":{"dolencia":"sop_ovario_poliquistico","productos":{"Crema facial":["Aqua","Butylparaben","Benzophenone-3"],"Agua":["Aqua"]}}}}}}},"/productos/{dolencia}":{"get":{"summary":"Productos implicados en una dolencia","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"dolencia","in":"path","required":true,"schema":{"type":"string"},"example":"sop_ovario_poliquistico","description":"clave de dolencia"},{"name":"per_agent","in":"query","required":false,"schema":{"type":"integer","default":6},"description":"máx. productos por agente","example":"6"}]}},"/producto/{consulta}":{"get":{"summary":"Ficha de producto por nombre/consulta","tags":["Prevención"],"description":"Ámbito requerido: `prevencion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"consulta","in":"path","required":true,"schema":{"type":"string"},"example":"crema","description":"nombre o texto de producto"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"description":"máx. resultados","example":"25"}]}},"/ruta/{agente}":{"get":{"summary":"Ruta de 5 capas agente→receptor→hormona→célula→tejido","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Bisfenol A (BPA)","description":"nombre del agente (canónico o INCI)"}]}},"/evidencia/{agente}":{"get":{"summary":"Ficha de evidencia trazable del agente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Butylparaben","description":"nombre del agente"}]}},"/puentes":{"get":{"summary":"Hormonas puente por prioridad de refuerzo","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}]}},"/puente/{hormona}":{"get":{"summary":"Detalle de una hormona puente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"hormona","in":"path","required":true,"schema":{"type":"string"},"example":"thyroid_hormone","description":"hormona puente"},{"name":"per_side","in":"query","required":false,"schema":{"type":"integer","default":12},"description":"elementos por lado","example":"12"}]}},"/recursividad/{agente}":{"get":{"summary":"Índice de recursividad (bioamplificación) del agente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Ftalato DEHP","description":"nombre del agente"}]}},"/bioacumulacion/{agente}":{"get":{"summary":"Bioacumulación (log Kow, clase) del agente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Ftalato DEHP","description":"nombre del agente"}]}},"/bioactividad/{agente}":{"get":{"summary":"Bioactividad por receptores del agente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Bisfenol A (BPA)","description":"nombre del agente"}]}},"/exposicion/{agente}":{"get":{"summary":"Fuentes de exposición del agente","tags":["Trazabilidad"],"description":"Ámbito requerido: `trazabilidad`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"agente","in":"path","required":true,"schema":{"type":"string"},"example":"Ftalato DEHP","description":"nombre del agente"}]}},"/farmacos":{"get":{"summary":"Fármacos por receptor/dirección","tags":["Fármacos"],"description":"Ámbito requerido: `farmacos`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"receptor","in":"query","required":false,"schema":{"type":"string"},"description":"receptor diana","example":"er"},{"name":"approved_only","in":"query","required":false,"schema":{"type":"boolean"},"description":"solo aprobados","example":"true"},{"name":"direction","in":"query","required":false,"schema":{"type":"string"},"description":"dirección"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":300},"description":"máx. resultados","example":"300"}]}},"/medicamentos":{"get":{"summary":"Catálogo de medicamentos (filtros)","tags":["Fármacos"],"description":"Ámbito requerido: `farmacos`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"approved_only","in":"query","required":false,"schema":{"type":"boolean"},"description":"solo aprobados","example":"true"},{"name":"molecule_type","in":"query","required":false,"schema":{"type":"string"},"description":"tipo de molécula"},{"name":"linked_only","in":"query","required":false,"schema":{"type":"boolean"},"description":"solo con enlaces"},{"name":"name_like","in":"query","required":false,"schema":{"type":"string"},"description":"filtro por nombre"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500},"description":"máx. resultados","example":"500"}]}},"/cruce":{"get":{"summary":"Cruce global medicamento↔disruptor","tags":["Fármacos"],"description":"Ámbito requerido: `farmacos`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}]}},"/cruce/medicamento/{medicamento}":{"get":{"summary":"Cruce por medicamento","tags":["Fármacos"],"description":"Ámbito requerido: `farmacos`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"medicamento","in":"path","required":true,"schema":{"type":"string"},"example":"levothyroxine","description":"nombre del medicamento"}]}},"/cruce/disruptor/{disruptor}":{"get":{"summary":"Cruce por disruptor","tags":["Fármacos"],"description":"Ámbito requerido: `farmacos`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"disruptor","in":"path","required":true,"schema":{"type":"string"},"example":"Bisfenol A (BPA)","description":"nombre del disruptor"}]}},"/enfermedades":{"get":{"summary":"Enfermedades (Open Targets) con filtros","tags":["Enfermedades"],"description":"Ámbito requerido: `enfermedades`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"area","in":"query","required":false,"schema":{"type":"string"},"description":"área terapéutica"},{"name":"min_score","in":"query","required":false,"schema":{"type":"number","default":0},"description":"score mínimo","example":"0"},{"name":"confianza","in":"query","required":false,"schema":{"type":"string"},"description":"nivel de confianza"},{"name":"connected_only","in":"query","required":false,"schema":{"type":"boolean"},"description":"solo conectadas a agentes","example":"true"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string"},"description":"orden","example":"score"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":300},"description":"máx. resultados","example":"300"}]}},"/enfermedad/{disease}":{"get":{"summary":"Enfermedad → receptor → órgano → agentes","tags":["Enfermedades"],"description":"Ámbito requerido: `enfermedades`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"disease","in":"path","required":true,"schema":{"type":"string"},"example":"EFO_0001075","description":"id o nombre de la enfermedad"}]}},"/certificar":{"post":{"summary":"Emite un certificado GOVP-1 firmado (grado de transparencia A–E)","tags":["Certificación"],"description":"Ámbito requerido: `certificacion`. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}},"401":{"description":"Falta token"},"403":{"description":"Token inválido o sin el ámbito requerido"},"429":{"description":"Cuota mensual agotada"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificarRequest"},"example":{"dolencia":"sop_ovario_poliquistico","solicitante":"acme-cosmetics","productos":{"Serum":["Aqua","Butylparaben"]}}}}}}},"/certificar/verificar":{"post":{"summary":"Verifica un record GOVP-1 (formato, firma Ed25519, govp-id)","tags":["Certificación"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}}},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificarRequest"},"example":{"record":"version: GOVP-1\n...(pega el record devuelto por /certificar)"}}}}}},"/certificar/clave-publica":{"get":{"summary":"Identidad de dominio GOVP-1 (clave pública raw 32B)","tags":["Certificación"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}}},"security":[]}},"/.well-known/govp.txt":{"get":{"summary":"Identidad del dominio GOVP-1 (texto)","tags":["Descubrimiento"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"text/plain":{}}}},"security":[]}},"/.well-known/govp/index.json":{"get":{"summary":"Lista de records GOVP-1 emitidos","tags":["Descubrimiento"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}}},"security":[]}},"/.well-known/govp/{govp_id}.govp":{"get":{"summary":"Un record GOVP-1 en texto plano","tags":["Descubrimiento"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"text/plain":{}}},"404":{"description":"Record no encontrado"}},"security":[],"parameters":[{"name":"govp_id","in":"path","required":true,"schema":{"type":"string"},"example":"GOVP-DOC-f7cd7d69a444","description":"identificador GOVP-1"}]}},"/salud":{"get":{"summary":"Estado del servicio + índice de endpoints","tags":["Meta"],"description":"Público, sin token. Certifica transparencia y nivel de evidencia (E0-E5), NO seguridad ni eficacia. No es consejo médico.","responses":{"200":{"description":"OK","content":{"application/json":{}}}},"security":[]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Token de consumo: `Authorization: Bearer bsk_<producto>_<...>`"}},"schemas":{"ShelfScanRequest":{"type":"object","required":["dolencia","productos"],"properties":{"dolencia":{"type":"string","description":"clave de dolencia (ver GET /dolencias)","example":"sop_ovario_poliquistico"},"productos":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"{'nombre del producto': ['Ingrediente 1', 'Ingrediente 2', ...]}"}}},"CertificarRequest":{"type":"object","required":["dolencia"],"properties":{"dolencia":{"type":"string","example":"sop_ovario_poliquistico"},"solicitante":{"type":"string","description":"identidad del solicitante (opcional)","example":"acme-cosmetics"},"productos":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"VerificarRequest":{"type":"object","required":["record"],"properties":{"record":{"type":"string","description":"el record GOVP-1 en texto plano devuelto por /certificar"}}},"GovpBlock":{"type":"object","description":"Bloque de certificación GOVP-1 devuelto por /certificar","properties":{"version":{"type":"string","example":"GOVP-1"},"govp_id":{"type":"string","example":"GOVP-DOC-f7cd7d69a444"},"asset_sha256":{"type":"string"},"firmado":{"type":"boolean"},"record":{"type":"string","description":"record GOVP-1 en texto (firmado)"},"canonical":{"type":"string"}}}}},"externalDocs":{"description":"Verificador de referencia GOVP-1 (govp_core.js/php/py)","url":"https://biologicalsecure.com/.well-known/govp.txt"}}