{"openapi":"3.1.0","info":{"title":"RADAR FENIX API","description":"API pública del radar de noticias FENIX.","version":"2.9.5"},"paths":{"/icon-512.png":{"get":{"summary":"Icon","operationId":"icon_icon_512_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health":{"get":{"summary":"Health","description":"Estado de la API: DB + Redis health checks.","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/sources":{"get":{"summary":"Listar Fuentes","description":"Catálogo público de fuentes del radar (23 provincias + YouTube).","operationId":"listar_fuentes_api_v1_sources_get","parameters":[{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtra por tipo: editorial|youtube","title":"Tipo"},"description":"Filtra por tipo: editorial|youtube"},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código ISO de la provincia","title":"Provincia"},"description":"Código ISO de la provincia"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Región: NOA|NEA|Cuyo|Pampa|Patagonia|Nacional","title":"Region"},"description":"Región: NOA|NEA|Cuyo|Pampa|Patagonia|Nacional"},{"name":"canonico","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo canónico: EDITORIAL|YOUTUBE|SOCIAL|GOVERNMENT|OFFICIAL|OTHER","title":"Canonico"},"description":"Tipo canónico: EDITORIAL|YOUTUBE|SOCIAL|GOVERNMENT|OFFICIAL|OTHER"},{"name":"canal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"MEDIO|CUENTA|FUENTE_OFICIAL","title":"Canal"},"description":"MEDIO|CUENTA|FUENTE_OFICIAL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuenteListaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources/{fuente_id}/health":{"get":{"summary":"Fuente Health","description":"Source health (P0.4): disponibilidad observada de una fuente del radar.\n\nDevuelve solo métricas de cobertura del canal de ingesta: nada de\ninfraestructura interna ni mensajes de error crudos.","operationId":"fuente_health_api_v1_sources__fuente_id__health_get","parameters":[{"name":"fuente_id","in":"path","required":true,"schema":{"type":"string","title":"Fuente Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/items":{"get":{"summary":"Listar Items","description":"Listado paginado de noticias del radar.\n\nLee de fenix_api.items (ingesta propia de la API, independiente del CRM).","operationId":"listar_items_api_v1_items_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Número de página","default":1,"title":"Page"},"description":"Número de página"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Tamaño de página (máx 100)","default":50,"title":"Page Size"},"description":"Tamaño de página (máx 100)"},{"name":"fuente","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtra por fuente_origen","title":"Fuente"},"description":"Filtra por fuente_origen"},{"name":"territorio","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtra por territorio: salta|rosario","title":"Territorio"},"description":"Filtra por territorio: salta|rosario"},{"name":"nicho","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":10,"minimum":1},{"type":"null"}],"description":"Filtra por nicho (1-10)","title":"Nicho"},"description":"Filtra por nicho (1-10)"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Score mínimo","title":"Min Score"},"description":"Score mínimo"},{"name":"max_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Score máximo","title":"Max Score"},"description":"Score máximo"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Busqueda en titulo/bajada","title":"Search"},"description":"Busqueda en titulo/bajada"},{"name":"fecha_desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Desde (ISO 8601)","title":"Fecha Desde"},"description":"Desde (ISO 8601)"},{"name":"fecha_hasta","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Hasta (ISO 8601)","title":"Fecha Hasta"},"description":"Hasta (ISO 8601)"},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código ISO de provincia","title":"Provincia"},"description":"Código ISO de provincia"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Región","title":"Region"},"description":"Región"},{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"editorial|youtube","title":"Tipo"},"description":"editorial|youtube"},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"agenda: seguridad|politica|servicio|economia|deportes|cultura|general","title":"Tema"},"description":"agenda: seguridad|politica|servicio|economia|deportes|cultura|general"},{"name":"clusters","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo notas EN EXPANSIÓN (2+ fuentes)","title":"Clusters"},"description":"Solo notas EN EXPANSIÓN (2+ fuentes)"},{"name":"huerfanas","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo notas con 1 fuente (posible exclusiva)","title":"Huerfanas"},"description":"Solo notas con 1 fuente (posible exclusiva)"},{"name":"primicia","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo la fuente que publicó primero","title":"Primicia"},"description":"Solo la fuente que publicó primero"},{"name":"gap","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo temas con baja cobertura (oportunidad periodística)","title":"Gap"},"description":"Solo temas con baja cobertura (oportunidad periodística)"},{"name":"min_fuentes","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":50,"minimum":1},{"type":"null"}],"description":"Mínimo de fuentes que replicaron","title":"Min Fuentes"},"description":"Mínimo de fuentes que replicaron"},{"name":"ventana","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ventana relativa: 15m|1h|6h|24h|48h","title":"Ventana"},"description":"Ventana relativa: 15m|1h|6h|24h|48h"},{"name":"sin_video","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo notas sin video (oportunidad)","title":"Sin Video"},"description":"Solo notas sin video (oportunidad)"},{"name":"orden","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"fecha|n_fuentes|velocidad","title":"Orden"},"description":"fecha|n_fuentes|velocidad"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clusters":{"get":{"summary":"Listar Clusters","description":"Notas EN EXPANSIÓN: la misma nota replicada en N fuentes.\n\nCada cluster indica de dónde salió (primicia), cuántas fuentes la\ntomaron, en cuántas provincias y en qué minutos se expandió.","operationId":"listar_clusters_api_v1_clusters_get","parameters":[{"name":"min_fuentes","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":2,"description":"Mínimo de fuentes que replicaron","default":2,"title":"Min Fuentes"},"description":"Mínimo de fuentes que replicaron"},{"name":"ventana","in":"query","required":false,"schema":{"type":"string","description":"Ventana: 15m|1h|6h|24h|48h","default":"24h","title":"Ventana"},"description":"Ventana: 15m|1h|6h|24h|48h"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gaps":{"get":{"summary":"Listar Gaps","description":"COBERTURA GAP: temas que están pasando y casi nadie está cubriendo.\n\nEl corazón periodístico de APIFENIX: donde hay noticia y no hay\ncolumnas, hay trabajo para un periodista.","operationId":"listar_gaps_api_v1_gaps_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mapa":{"get":{"summary":"Mapa Radar","description":"Mapa de calor provincial: qué pasa y dónde, ahora mismo.","operationId":"mapa_radar_api_v1_mapa_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","description":"Ventana: 15m|1h|6h|24h|48h","default":"6h","title":"Ventana"},"description":"Ventana: 15m|1h|6h|24h|48h"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reloj":{"get":{"summary":"Reloj Noticias","description":"RELOJ DE LA NOTICIA: quién publicó primero y cuánto tardó cada medio.","operationId":"reloj_noticias_api_v1_reloj_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/primicias":{"get":{"summary":"Listar Primicias","description":"Solo notas donde una fuente fue la PRIMERA en publicar esa nota.","operationId":"listar_primicias_api_v1_primicias_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/huerfanas":{"get":{"summary":"Listar Huerfanas","description":"NOTAS HUÉRFANAS: una sola fuente, nadie las replicó → posible exclusiva.","operationId":"listar_huerfanas_api_v1_huerfanas_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/items/{item_id}":{"get":{"summary":"Detalle Item","description":"Detalle de una noticia por UUID (tabla fenix_api.items).","operationId":"detalle_item_api_v1_items__item_id__get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/me":{"get":{"summary":"Mi Key Info","description":"Información de la API key usada en esta request.","operationId":"mi_key_info_api_v1_keys_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInfoResponse"}}}}}}},"/api/v1/quotas":{"get":{"summary":"Quota Info","description":"Cuota diaria actual de la key.","operationId":"quota_info_api_v1_quotas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/buscar":{"get":{"summary":"Buscar Notas","description":"Búsqueda full-text indexada (tsvector + GIN) sobre el texto plano.\n\nCada resultado trae `score_lex`: el score léxico rioplatense nativo de\nPostgres (`lexicon_rio`), orientativo y barato. El análisis de sentimiento\npor entidad (ABSA) corre 100% en el navegador del cliente con\nTransformers.js — nunca en este server.","operationId":"buscar_notas_api_v1_buscar_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120,"description":"Palabras de búsqueda (diccionario español)","title":"Q"},"description":"Palabras de búsqueda (diccionario español)"},{"name":"ventana","in":"query","required":false,"schema":{"type":"string","description":"Ventana: 1h|6h|24h|48h|7d","default":"48h","title":"Ventana"},"description":"Ventana: 1h|6h|24h|48h|7d"},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código AR-X","title":"Provincia"},"description":"Código AR-X"},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quotes":{"get":{"summary":"Citas Textuales","description":"Citas textuales (\"…\") extraídas del cuerpo indexado, con hablante\nsugerido por el verbo decendi que sigue a la comilla (dijo/afirmó/señaló).\nDetección relacional pura en PL/pgSQL: cero ML en el server.","operationId":"citas_textuales_api_v1_quotes_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","description":"Ventana: 1h|6h|24h|48h|7d","default":"24h","title":"Ventana"},"description":"Ventana: 1h|6h|24h|48h|7d"},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código AR-X","title":"Provincia"},"description":"Código AR-X"},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"hablante","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring del hablante","title":"Hablante"},"description":"Substring del hablante"},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes":{"get":{"summary":"Feed Publico","operationId":"feed_publico_api_v1_notes_get","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limite"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Publicar Nota","description":"Alta de nota: exige consentimiento VIGENTE de la versión actual\n(doble chequeo: acá y en press_insertar_nota). Nace pending_review; la\npublica el worker de moderación, nunca esta ruta.","operationId":"publicar_nota_api_v1_notes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/notes/{nota_id}":{"get":{"summary":"Nota Publica","operationId":"nota_publica_api_v1_notes__nota_id__get","parameters":[{"name":"nota_id","in":"path","required":true,"schema":{"type":"string","title":"Nota Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/{nota_id}/report":{"post":{"summary":"Denunciar","description":"Reporte ciudadano (anónimo permitido; copyright exige identificación\ndel reclamante). 3 IPs distintas o reclamo de derechos → preventive_block\natómico en la misma función SQL.","operationId":"denunciar_api_v1_notes__nota_id__report_post","parameters":[{"name":"nota_id","in":"path","required":true,"schema":{"type":"string","title":"Nota Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/consentir":{"post":{"summary":"Consentir","description":"Aceptación explícita del contrato + alta/actualización del perfil de\nprensa. Idempotente por diseño: si ya hay consentimiento vigente de la\nversión, devuelve el recibo previo.","operationId":"consentir_api_v1_prensa_consentir_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/prensa/documentos":{"post":{"summary":"Subir Documento","description":"Carga de documento de identidad (dni_frente|dni_dorso|pasaporte|otro).\nSesión del portal + mismo-origen + techo por IP. Se guarda FUERA del\nárbol público, sellado con sha256; la fila es inmutable (trigger) salvo\nel estado de verificación.","operationId":"subir_documento_api_v1_prensa_documentos_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_subir_documento_api_v1_prensa_documentos_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/estado":{"get":{"summary":"Estado Publicador","description":"Todo lo que la pantalla Publicar del panel necesita para gobernar sus\ntres pasos: contrato vigente firmado, documentos y si ya puede publicar.","operationId":"estado_publicador_api_v1_prensa_estado_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/notes/mias/{cliente_id}":{"get":{"summary":"Mis Notas","description":"Vista privada del autor: estados y motivo técnico (solo del dueño).","operationId":"mis_notas_api_v1_notes_mias__cliente_id__get","parameters":[{"name":"cliente_id","in":"path","required":true,"schema":{"type":"integer","title":"Cliente Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/{nota_id}/retirar":{"post":{"summary":"Retirar","operationId":"retirar_api_v1_notes__nota_id__retirar_post","parameters":[{"name":"nota_id","in":"path","required":true,"schema":{"type":"string","title":"Nota Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/evidencia/{nota_id}":{"get":{"summary":"Evidencia","description":"CADENA DE EVIDENCIA completa, lista para un requerimiento judicial.\nSolo el operador (PRENSA_ADMIN_EMAIL). Es el corazón de la defensa de\nintermediario: prueba en segundos que la plataforma (1) exigió consent-\nimiento jurado con IP/hora/versión, (2) NO editó el contenido (hash sellado\nal insertar), (3) reaccionó a las denuncias. Nada de esto es público.","operationId":"evidencia_api_v1_prensa_evidencia__nota_id__get","parameters":[{"name":"nota_id","in":"path","required":true,"schema":{"type":"string","title":"Nota Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/denuncias":{"get":{"summary":"Cola Denuncias","description":"Cola de denuncia pendiente: lo que el operador DEBE atender para mantener\nla conducta activa que exige la defensa de intermediario.","operationId":"cola_denuncias_api_v1_prensa_denuncias_get","parameters":[{"name":"incluir_procesadas","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Incluir Procesadas"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/denuncias/{report_id}/procesar":{"post":{"summary":"Marcar Procesada","description":"Marca la denuncia como atendida (el operador revisó el reclamo). No toca\nla evidencia inmutable: solo el flag procesado.","operationId":"marcar_procesada_api_v1_prensa_denuncias__report_id__procesar_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prensa/documentos/{doc_id}/verificar":{"post":{"summary":"Verificar Documento","description":"Operador: marca un documento como verificado o rechazado (con motivo\nprivado). Es lo ÚNICO editable de la fila — el trigger congela el resto.\nUn documento 'rechazado' deja de contar para la identidad: si era el\nfrente/dorso o el pasaporte, el autor no puede volver a publicar hasta\nsubir uno nuevo.","operationId":"verificar_documento_api_v1_prensa_documentos__doc_id__verificar_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"integer","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Landing público: presentación de la API. No expone fuentes ni datos reales.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api":{"get":{"summary":"Api Info","operationId":"api_info_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs":{"get":{"summary":"Documentacion","description":"Documentación premium de la API: catálogo de endpoints con ejemplos reales.","operationId":"documentacion_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/registro":{"get":{"summary":"Registro Form","operationId":"registro_form_registro_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Registro","operationId":"registro_registro_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_registro_registro_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verificar":{"get":{"summary":"Verificar","operationId":"verificar_verificar_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhook/resend":{"post":{"summary":"Webhook Resend","description":"Eventos de entrega de emails (Resend): valida la firma svix y registra.","operationId":"webhook_resend_webhook_resend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/google":{"get":{"summary":"Auth Google","operationId":"auth_google_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/callback":{"get":{"summary":"Auth Callback","operationId":"auth_callback_auth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"summary":"Login Form","operationId":"login_form_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Login","operationId":"login_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal":{"get":{"summary":"Portal","operationId":"portal_portal_get","parameters":[{"name":"nueva","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nueva"}},{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia"}},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"6h","title":"Ventana"}},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/config":{"get":{"summary":"Portal Config","description":"Configuración de la cuenta: perfil, apariencia, alertas, fuentes y herramientas.\nLas api keys y el agente personalizado ya no se gestionan desde el panel.","operationId":"portal_config_portal_config_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/config/guardar":{"post":{"summary":"Portal Config Guardar","operationId":"portal_config_guardar_portal_config_guardar_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_portal_config_guardar_portal_config_guardar_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/config/radar":{"post":{"summary":"Portal Config Radar","description":"Parámetros del radar (fuente única viva en Redis): intervalo del ciclo y\numbral de duplicación del Radar v2. Aplican al próximo ciclo, sin redeploy.","operationId":"portal_config_radar_portal_config_radar_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_portal_config_radar_portal_config_radar_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/peleas":{"get":{"summary":"Peleas","description":"Peleas de autoría: disputas manuales por la primicia de un hecho.","operationId":"peleas_portal_peleas_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/peleas/alta":{"post":{"summary":"Pelea Alta","operationId":"pelea_alta_portal_peleas_alta_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_pelea_alta_portal_peleas_alta_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/peleas/{pid}/cerrar":{"post":{"summary":"Pelea Cerrar","operationId":"pelea_cerrar_portal_peleas__pid__cerrar_post","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"integer","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/nuevas":{"get":{"summary":"Portal Nuevas","description":"Cuántas notas entraron al radar desde `since` (para la píldora En vivo).","operationId":"portal_nuevas_portal_nuevas_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/nueva-key":{"post":{"summary":"Portal Nueva Key","operationId":"portal_nueva_key_portal_nueva_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/fuentes":{"post":{"summary":"Portal Nueva Fuente","operationId":"portal_nueva_fuente_portal_fuentes_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_portal_nueva_fuente_portal_fuentes_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/webhooks":{"post":{"summary":"Portal Webhook Alta","operationId":"portal_webhook_alta_portal_webhooks_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_portal_webhook_alta_portal_webhooks_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/webhooks/{wid}/toggle":{"post":{"summary":"Portal Webhook Toggle","operationId":"portal_webhook_toggle_portal_webhooks__wid__toggle_post","parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"integer","title":"Wid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/webhooks/{wid}/borrar":{"post":{"summary":"Portal Webhook Borrar","operationId":"portal_webhook_borrar_portal_webhooks__wid__borrar_post","parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"integer","title":"Wid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/agente":{"get":{"summary":"Agente Form","operationId":"agente_form_portal_agente_get","parameters":[{"name":"titulo_custom","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Titulo Custom"}},{"name":"bajada_custom","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bajada Custom"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/agente/guardar":{"post":{"summary":"Agente Guardar","operationId":"agente_guardar_portal_agente_guardar_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_agente_guardar_portal_agente_guardar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/agente/redactar":{"post":{"summary":"Agente Redactar","operationId":"agente_redactar_portal_agente_redactar_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_agente_redactar_portal_agente_redactar_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/agente/chat":{"post":{"summary":"Agente Chat","description":"Chat por nota con contexto periodístico inyectado (apuntes + relacionadas).\nServer stateless: el historial lo trae el navegador. La key del proveedor es\nLA DEL PERIODISTA (ciflada en reposo): el server no gasta ni una API propia.","operationId":"agente_chat_portal_agente_chat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/inteligencia":{"get":{"summary":"Inteligencia Page","operationId":"inteligencia_page_portal_inteligencia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/inteligencia/datos":{"get":{"summary":"Inteligencia Datos","description":"Alimenta el pipeline del navegador: texto plano + score léxico NATIVO de\nPostgres (sentimiento_lexico sobre título+bajada). Cero inferencia acá: los\nmodelos pesados corren en la máquina del periodista con Transformers.js.","operationId":"inteligencia_datos_portal_inteligencia_datos_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/recorder":{"get":{"summary":"Recorder Page","operationId":"recorder_page_portal_recorder_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/recorder/jobs":{"get":{"summary":"Recorder Jobs","operationId":"recorder_jobs_portal_recorder_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/recorder/job":{"post":{"summary":"Recorder Job Start","description":"Ficha de arranque: el id lo genera el navegador (uuid) y el blob jamás\npasa por acá — solo título/origen de la toma.","operationId":"recorder_job_start_portal_recorder_job_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/recorder/job/{jid}/finish":{"post":{"summary":"Recorder Job Finish","operationId":"recorder_job_finish_portal_recorder_job__jid__finish_post","parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string","title":"Jid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/recorder/job/{jid}":{"delete":{"summary":"Recorder Job Delete","operationId":"recorder_job_delete_portal_recorder_job__jid__delete","parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string","title":"Jid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/nota/{item_id}":{"get":{"summary":"Leer Nota","operationId":"leer_nota_portal_nota__item_id__get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/nota/{item_id}/notas":{"post":{"summary":"Guardar Bloc Notas","description":"Autosave del bloc de notas del usuario sobre esta nota (upsert).","operationId":"guardar_bloc_notas_portal_nota__item_id__notas_post","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_guardar_bloc_notas_portal_nota__item_id__notas_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/mis-notas":{"get":{"summary":"Mis Notas","description":"Listado del bloc: las notas que el periodista redactó sobre notas del radar.\nCada fila enlaza a /portal/nota/{item_id}, donde el bloc se edita con autosave.","operationId":"mis_notas_portal_mis_notas_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/nota/{item_id}/resumen":{"post":{"summary":"Resumir Nota","operationId":"resumir_nota_portal_nota__item_id__resumen_post","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_resumir_nota_portal_nota__item_id__resumen_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/canales":{"get":{"summary":"Canales","description":"Canales de YouTube del radar: mirar y buscar videos SIN salir del panel.","operationId":"canales_portal_canales_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"fuente","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fuente"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/buscar":{"get":{"summary":"Buscar","operationId":"buscar_portal_buscar_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mapa":{"get":{"summary":"Mapa","description":"Mapa de calor: datos del radar, solo cuentas registradas.","operationId":"mapa_mapa_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"6h","title":"Ventana"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mural":{"get":{"summary":"Mural","description":"Mural de noticias con etiquetas periodísticas: solo cuentas registradas.","operationId":"mural_mural_get","parameters":[{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"6h","title":"Ventana"}},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tablero":{"get":{"summary":"Tableros","operationId":"tableros_tablero_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tablero/guardar":{"post":{"summary":"Tablero Guardar","operationId":"tablero_guardar_tablero_guardar_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_tablero_guardar_tablero_guardar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tablero/borrar/{tid}":{"post":{"summary":"Tablero Borrar","operationId":"tablero_borrar_tablero_borrar__tid__post","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"integer","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalogo":{"get":{"summary":"Catalogo Publico","description":"Catálogo de fuentes: solo cuentas registradas (el landing no expone datos).","operationId":"catalogo_publico_catalogo_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/ranking":{"get":{"summary":"Ranking Medios","description":"Ranking semanal público: qué medios replican más rápido y quién da más primicias.","operationId":"ranking_medios_ranking_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/primicias":{"get":{"summary":"Primicias","description":"Primicias del radar: quién publicó primero y cómo le fue. Fitrable.","operationId":"primicias_portal_primicias_get","parameters":[{"name":"provincia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia"}},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"orden","in":"query","required":false,"schema":{"type":"string","default":"viralidad","title":"Orden"}},{"name":"ventana","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Ventana"}},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/placas":{"get":{"summary":"Placas Form","operationId":"placas_form_portal_placas_get","parameters":[{"name":"item","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hecho/{cid}":{"get":{"summary":"Hecho Viral","description":"Página pública de un hecho replicado: timeline compartible entre medios.","operationId":"hecho_viral_hecho__cid__get","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","title":"Cid"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/placas/generar":{"post":{"summary":"Generar Placa","operationId":"generar_placa_portal_placas_generar_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generar_placa_portal_placas_generar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/fuentes/editar":{"get":{"summary":"Editar Fuente Form","operationId":"editar_fuente_form_portal_fuentes_editar_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Editar Fuente","operationId":"editar_fuente_portal_fuentes_editar_post","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_editar_fuente_portal_fuentes_editar_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"get":{"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal/guia":{"get":{"summary":"Guia","operationId":"guia_portal_guia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/copiloto":{"get":{"summary":"Copiloto Page","description":"Ventana de chat del Radar Copilot (opcional: con contexto de una nota).","operationId":"copiloto_page_portal_copiloto_get","parameters":[{"name":"nota","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nota"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Copiloto","operationId":"copiloto_portal_copiloto_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prensa":{"get":{"summary":"Prensa Feed","operationId":"prensa_feed_prensa_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/prensa/nota/{nota_id}":{"get":{"summary":"Prensa Nota","operationId":"prensa_nota_prensa_nota__nota_id__get","parameters":[{"name":"nota_id","in":"path","required":true,"schema":{"type":"string","title":"Nota Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prensa/terminos":{"get":{"summary":"Prensa Terminos","operationId":"prensa_terminos_prensa_terminos_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/prensa/publicar":{"get":{"summary":"Prensa Publicar","description":"PRENSA-3: la pantalla de publicación vive en el PANEL (sidebar\nRedacción → Publicar en PRENSA), donde se firma el contrato y se acredita\nla identidad con documento. Esta URL histórica redirige.","operationId":"prensa_publicar_prensa_publicar_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/portal/publicar":{"get":{"summary":"Portal Publicar","description":"Publicar en PRENSA desde el panel: paso 1 contrato firmado, paso 2\ndocumento de identidad, paso 3 nota (habilitada solo con 1+2).","operationId":"portal_publicar_portal_publicar_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"Body_agente_guardar_portal_agente_guardar_post":{"properties":{"proveedor":{"type":"string","title":"Proveedor"},"api_key":{"type":"string","title":"Api Key","default":""},"model":{"type":"string","title":"Model"},"base_url":{"type":"string","title":"Base Url","default":""},"tono":{"type":"string","title":"Tono","default":""},"largo":{"type":"string","title":"Largo","default":""},"formato":{"type":"string","title":"Formato","default":""},"publico":{"type":"string","title":"Publico","default":""}},"type":"object","required":["proveedor","model"],"title":"Body_agente_guardar_portal_agente_guardar_post"},"Body_agente_redactar_portal_agente_redactar_post":{"properties":{"item_id":{"type":"string","title":"Item Id","default":""},"tema":{"type":"string","title":"Tema","default":""}},"type":"object","title":"Body_agente_redactar_portal_agente_redactar_post"},"Body_editar_fuente_portal_fuentes_editar_post":{"properties":{"id":{"type":"integer","title":"Id"},"nombre":{"type":"string","title":"Nombre"},"dominio":{"type":"string","title":"Dominio"},"provincia":{"type":"string","title":"Provincia"},"tipo":{"type":"string","title":"Tipo"},"url":{"type":"string","title":"Url"}},"type":"object","required":["id","nombre","dominio","provincia","tipo","url"],"title":"Body_editar_fuente_portal_fuentes_editar_post"},"Body_generar_placa_portal_placas_generar_post":{"properties":{"item_id":{"type":"string","title":"Item Id","default":""},"medio":{"type":"string","title":"Medio"},"titulo_libre":{"type":"string","title":"Titulo Libre","default":""},"color_bg":{"type":"string","title":"Color Bg","default":"#0a0e0b"},"color_txt":{"type":"string","title":"Color Txt","default":"#e7ece9"},"color_banda":{"type":"string","title":"Color Banda","default":""},"variante":{"type":"string","title":"Variante","default":"noticia"},"formato":{"type":"string","title":"Formato","default":"vertical"},"etiqueta":{"type":"string","title":"Etiqueta","default":"AUTO"},"tam_titulo":{"type":"integer","title":"Tam Titulo","default":82},"tam_bajada":{"type":"integer","title":"Tam Bajada","default":40},"texto_pie":{"type":"string","title":"Texto Pie","default":""},"fecha":{"type":"string","title":"Fecha","default":""},"mostrar_bajada":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mostrar Bajada"},"mostrar_fuente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mostrar Fuente"},"mostrar_fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mostrar Fecha"},"mostrar_marca":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mostrar Marca"},"fondo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fondo"},"fondo_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Fondo File"}},"type":"object","required":["medio"],"title":"Body_generar_placa_portal_placas_generar_post"},"Body_guardar_bloc_notas_portal_nota__item_id__notas_post":{"properties":{"texto":{"type":"string","title":"Texto","default":""}},"type":"object","title":"Body_guardar_bloc_notas_portal_nota__item_id__notas_post"},"Body_login_login_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"Body_login_login_post"},"Body_pelea_alta_portal_peleas_alta_post":{"properties":{"titulo":{"type":"string","title":"Titulo"},"nota_a":{"type":"string","title":"Nota A"},"nota_b":{"type":"string","title":"Nota B"},"motivo":{"type":"string","title":"Motivo","default":""}},"type":"object","required":["titulo","nota_a","nota_b"],"title":"Body_pelea_alta_portal_peleas_alta_post"},"Body_portal_config_guardar_portal_config_guardar_post":{"properties":{"nombre":{"type":"string","title":"Nombre","default":""},"medio":{"type":"string","title":"Medio","default":""},"tema":{"type":"string","title":"Tema","default":"noche"},"foco_horas":{"type":"string","title":"Foco Horas","default":"24"}},"type":"object","title":"Body_portal_config_guardar_portal_config_guardar_post"},"Body_portal_config_radar_portal_config_radar_post":{"properties":{"cada_min":{"type":"string","title":"Cada Min","default":"15"},"umbral":{"type":"string","title":"Umbral","default":"0.55"}},"type":"object","title":"Body_portal_config_radar_portal_config_radar_post"},"Body_portal_nueva_fuente_portal_fuentes_post":{"properties":{"nombre":{"type":"string","title":"Nombre"},"dominio":{"type":"string","title":"Dominio"},"provincia":{"type":"string","title":"Provincia"},"tipo":{"type":"string","title":"Tipo"},"url":{"type":"string","title":"Url"}},"type":"object","required":["nombre","dominio","provincia","tipo","url"],"title":"Body_portal_nueva_fuente_portal_fuentes_post"},"Body_portal_webhook_alta_portal_webhooks_post":{"properties":{"nombre":{"type":"string","title":"Nombre"},"url":{"type":"string","title":"Url"},"tipo":{"type":"string","title":"Tipo","default":"expansion"},"provincia":{"type":"string","title":"Provincia","default":""},"tema":{"type":"string","title":"Tema","default":""},"n_min":{"type":"integer","title":"N Min","default":3}},"type":"object","required":["nombre","url"],"title":"Body_portal_webhook_alta_portal_webhooks_post"},"Body_registro_registro_post":{"properties":{"nombre":{"type":"string","title":"Nombre"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["nombre","email","password"],"title":"Body_registro_registro_post"},"Body_resumir_nota_portal_nota__item_id__resumen_post":{"properties":{"largo":{"type":"string","title":"Largo","default":"corto"}},"type":"object","title":"Body_resumir_nota_portal_nota__item_id__resumen_post"},"Body_subir_documento_api_v1_prensa_documentos_post":{"properties":{"tipo":{"type":"string","title":"Tipo"},"archivo":{"type":"string","format":"binary","title":"Archivo"}},"type":"object","required":["tipo","archivo"],"title":"Body_subir_documento_api_v1_prensa_documentos_post"},"Body_tablero_guardar_tablero_guardar_post":{"properties":{"nombre":{"type":"string","title":"Nombre"},"provincia":{"type":"string","title":"Provincia","default":""},"tema":{"type":"string","title":"Tema","default":""},"ventana":{"type":"string","title":"Ventana","default":"6h"},"consulta":{"type":"string","title":"Consulta","default":""}},"type":"object","required":["nombre"],"title":"Body_tablero_guardar_tablero_guardar_post"},"FuenteListaResponse":{"properties":{"total":{"type":"integer","title":"Total"},"fuentes":{"items":{"$ref":"#/components/schemas/FuenteResponse"},"type":"array","title":"Fuentes"}},"type":"object","required":["total","fuentes"],"title":"FuenteListaResponse"},"FuenteResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Identificador de la fuente"},"nombre":{"type":"string","title":"Nombre","description":"Nombre legible de la fuente"},"dominio":{"type":"string","title":"Dominio","description":"Dominio principal"},"provincia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia","description":"Código ISO de provincia"},"provincia_nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia Nombre","description":"Nombre de la provincia"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"Región"},"tipo":{"type":"string","title":"Tipo","description":"Tipo: editorial | youtube"},"subtipo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtipo","description":"rss | search | youtube"},"tipo_canonico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo Canonico","description":"EDITORIAL|YOUTUBE|SOCIAL|GOVERNMENT|OFFICIAL|OTHER"},"canal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canal","description":"MEDIO | CUENTA | FUENTE_OFICIAL"},"plataforma":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plataforma","description":"GOOGLE_NEWS | X | YOUTUBE | None (RSS propio)"},"zona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zona","description":"Zona geográfica (A/B/C) - legacy"},"rss":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rss","description":"Feed RSS (si aplica)"},"rss_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rss Url","description":"Feed RSS - legacy"},"home":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home","description":"Sitio web principal"},"home_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Url","description":"Sitio web - legacy"},"verificada":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verificada","description":"Tiene RSS/query resuelto"}},"type":"object","required":["id","nombre","dominio","tipo"],"title":"FuenteResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Estado general: ok|degraded","default":"ok"},"database":{"type":"boolean","title":"Database","description":"Conexión a PostgreSQL"},"redis":{"type":"boolean","title":"Redis","description":"Conexión a Redis"},"version":{"type":"string","title":"Version","description":"Versión de la API","default":"2.9.5"}},"type":"object","required":["database","redis"],"title":"HealthResponse"},"KeyInfoResponse":{"properties":{"key_prefix":{"type":"string","title":"Key Prefix","description":"Prefijo de la key (ultimos 8 chars). ID visual."},"plan":{"type":"string","title":"Plan","description":"Plan: free|pro|enterprise"},"activo":{"type":"boolean","title":"Activo"},"expira_en":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expira En"},"ultimo_uso":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ultimo Uso"},"requests_usados":{"type":"integer","title":"Requests Usados","default":0},"limite_minuto":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limite Minuto","description":"Requests/minuto. null = unlimited"},"limite_diario":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limite Diario","description":"Requests/dia. null = unlimited"}},"type":"object","required":["key_prefix","plan","activo"],"title":"KeyInfoResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}