Radar Notiviral NOTIVIRALAPI FENIX · AR
Documentación · v2.9.5

La API de señales
periodísticas de Argentina

15 endpoints REST sobre los medios y canales de las 24 jurisdicciones. Todo lo que ves en el panel, en JSON: clusters, primicias, exclusivas, huecos de cobertura y el feed etiquetado.

Base URL
https://apifenix.radar-notiviral.online/api/v1

HTTPS-only, JSON UTF-8, páginas de a máximo 200 ítems con offset.

Autenticación
X-API-Key: afk_tu_key

Generás la key desde tu panel (/portal), con un clic. El servidor guarda solo el hash: si la perdés, creás otra. /health y /docs no piden key.

Rate limit
5.000 requests / día · plan Free

El límite corre por key y se resetea a la medianoche UTC. Consultá tu consumo real en /api/v1/quotas o en tu panel.

Quickstart

Primer request en 10 segundos

# qué se publicó en Salta en la última hora
curl -H "X-API-Key: $FENIX_KEY" \
  "https://apifenix.radar-notiviral.online/api/v1/items?provincia=AR-A&ventana=1h&limit=20"
# Python: notas en expansión (clusters)
import requests
r = requests.get("…/api/v1/clusters",
                 headers={"X-API-Key": KEY},
                 params={"ventana": "6h"})
for c in r.json()["clusters"]:
    print(c["titulo"], c["n_fuentes"])
Embebible

Badge "dato por API FENIX" en tus notas

Marcá qué dato tuyo viene del radar y dale al lector una fuente verificable. Pegá este bloque en el HTML de tu nota: se ve así → dato por API FENIX

<a class="fenix-badge"
   href="https://radar-notiviral.online/hecho/ID_CLUSTER"
   target="_blank" rel="noopener">
  <svg viewBox="0 0 24 24" width="16" height="16">
    <path d="M12 2c1 4-2 5-2 8a4 4 0 0 0 8 0c0-2-1-3-1-5 3 2 4 5 4 8a9 9 0 1 1-18 0c0-5 4-7 5-11 1 2 3 2 4 1z" fill="#fb923c"/>
  </svg><span>dato por <b>API FENIX</b></span>
</a>
<style>.fenix-badge{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;
  font:600 13px/1 system-ui;color:#e8e6e1;background:#151821;border:1px solid #fb923c99;text-decoration:none}
  .fenix-badge b{color:#fb923c}</style>

Opción JS — dejá que un div con data-cluster="ID_CLUSTER" se convierta en badge automáticamente y se actualice sin tocar el markup:

<div class="fenix-badge" data-cluster="ID_CLUSTER" data-fuentes="6"></div>
<script src="https://radar-notiviral.online/static/badge.js" async></script>
Radar v2 — señales periodísticas
GET /api/v1/clusters

Notas en expansión

La misma noticia replicada por varios medios, agrupada por firma. Es la señal de que algo está creciendo ahora.

Parámetrosprovincia, tema, ventana (1h|6h|24h|48h|7d), min_fuentes, limit
Respuesta de ejemplo
{"cluster_id": "f3a9…", "titulo": "…", "n_fuentes": 6, "primero": {"fuente": "El Tribuno", "hace_min": 12}}
GET /api/v1/reloj

Quién publicó primero

Para cada cluster, el orden y la antigüedad de cada medio que tomó la nota. Perfecto para verificar primicias.

Parámetroscluster_id (opcional), ventana, limit
Respuesta de ejemplo
{"titulo": "…", "orden": [{"fuente": "Data Jujuy", "min": 0}, {"fuente": "El Tribuno", "min": 42}]}
GET /api/v1/primicias

Primicias

Notas publicadas por un medio y replicadas por otros después: la exclusiva verificada del día.

Parámetrosprovincia, ventana, limit
Respuesta de ejemplo
{"items": [{"titulo": "…", "fuente_origen": "…", "n_fuentes": 5, "velocidad_min": 125}]}
GET /api/v1/huerfanas

Posibles exclusivas

Notas que publicó un solo medio y nadie más replicó: oportunidades que tus competidores no están viendo.

Parámetrosprovincia, tema, ventana, limit
Respuesta de ejemplo
{"items": [{"titulo": "…", "fuente_origen": "Radio Mitre Salta", "created_at": "…"}]}
GET /api/v1/gaps

Huecos de cobertura

Provincias o temas con actividad inusualmente baja en la ventana: territorio sin dueño para tu redacción.

Parámetrosventana, limit
Respuesta de ejemplo
{"gaps": [{"provincia": "AR-L", "nombre": "La Pampa", "items": 2, "esperados": 31}]}
Datos
GET /api/v1/items

Ítems del radar

El feed completo con etiquetas: provincia, tema, score, señales, imagen y texto extraído cuando la fuente lo publica.

Parámetrosprovincia, tema, tipo (editorial|youtube), fuente_id, q, ventana, offset, limit (máx. 200)
Respuesta de ejemplo
{"total": 4386, "items": [{"id": "uuid", "titulo": "…", "tema": "seguridad", "es_primicia": true}]}
GET /api/v1/items/{id}

Ítem por id

La nota o video completo por su identificador, listo para tu app o tu escritorio de redacción.

Parámetrosid (uuid)
Respuesta de ejemplo
{"id": "uuid", "titulo": "…", "contenido_texto": "…", "imagen_url": "https://…"}
GET /api/v1/mapa

Mapa de calor provincial

Cuánto late cada provincia en la ventana, con sus titulares más calientes. La foto nacional del día.

Parámetrosventana
Respuesta de ejemplo
{"provincias": [{"codigo": "AR-A", "nombre": "Salta", "total": 194, "titulares": ["…"]}]}
GET /api/v1/sources

Fuentes del radar

El catálogo de los 684 medios y canales indexados: nombre, provincia, región y tipo.

Parámetrosprovincia, tipo
Respuesta de ejemplo
{"total": 684, "sources": [{"id": "gnews_ar_a", "nombre": "Medios Salta", "provincia": "AR-A", "tipo": "editorial"}]}
GET /api/v1/sources/{id}/health

Estado de una fuente

Qué tan confiable está llegando el feed de una fuente: estado, tasa de error y disponibilidad de los últimos 90 ciclos de ingesta.

Parámetrosid (del catálogo)
Respuesta de ejemplo
{"fuente_id": "gnews_ar_a", "estado": "ok", "error_rate": 0.01, "disponibilidad_ultima_90": 0.99}
Analítica (Postgres nativo)
GET /api/v1/buscar

Búsqueda full-text indexada

Busca sobre el texto plano con índice tsvector+GIN y te devuelve cada nota con su score léxico rioplatense. El análisis de sentimiento fino (ABSA) lo corre tu navegador con Transformers.js: este server nunca infiere.

Parámetrosq (palabras), ventana (1h|6h|24h|48h|7d), provincia, tema, limit
Respuesta de ejemplo
{"consulta": "ruta 9", "total": 12, "items": [{"id": "uuid", "titulo": "…", "score_ts": 0.18, "score_lex": -0.42}]}
GET /api/v1/quotes

Citas textuales con hablante

Declaraciones literales extraídas del cuerpo de las notas (comillas + verbo decendi): quién dijo qué, listo para verificar y para tu agente.

Parámetrosventana, provincia, tema, hablante (substring), limit
Respuesta de ejemplo
{"total": 34, "citas": [{"cita": "…", "hablante": "el gobernador", "fuente": "…"}]}
Cuenta
GET /api/v1/keys/me

Mis keys

Tus API keys activas con prefijo, plan y fecha de expiración (la key completa nunca se devuelve).

Parámetros— (autenticación con X-API-Key)
Respuesta de ejemplo
{"keys": [{"prefix": "l0Q2LBYo", "plan": "free", "expira_en": "2027-10-02"}]}
GET /api/v1/quotas

Mi consumo

Requests usados hoy y límite diario de tu plan, para que tus integraciones no se sorprendan.

Parámetros— (autenticación con X-API-Key)
Respuesta de ejemplo
{"plan": "free", "usados_hoy": 143, "limite_diario": 5000}
GET /api/v1/health

Estado del servicio

Ping público: versión, última ingesta y cantidad de ítems indexados. Sin key.

Parámetros—
Respuesta de ejemplo
{"status": "ok", "version": "2.4.0", "items_totales": 21686, "ultima_ingesta": "…"}

¿Todo listo para integrar?

Creá tu cuenta, generá la key y conectá tu redacción al radar de las 24 jurisdicciones. Sin tarjeta, sin demo: datos reales desde el primer request.