⚑ antisemitismo.kavnes.com

API JSON pública

Endpoints REST sobre los mismos datos que ves en el dashboard. Sin autenticación, rate-limit razonable, todo JSON. Usalo para investigación, dashboards externos, integraciones de prensa.

Endpoints /api/incidents /api/incidents/:id /api/countries /api/compare /api/index/continent /api/stream /api/matches /api/matches/stats /api/alerts /api/search /api/search.csv /api/health
Base URL: https://antisemitismo.kavnes.com. Todas las respuestas tienen Content-Type: application/json; charset=utf-8 y un campo ok: true|false al inicio. Errores: { "ok": false, "error": "..." }. Timestamps en milisegundos (UNIX epoch).

Incidentes

GET/api/incidents

Feed paginado de incidentes clasificados, ordenados por timestamp descendente.

ParamTipoDescripción
countryISO-2Filtrar por país (ej. AR, FR).
continentstringFiltrar por continente: EU, NA, LATAM, MENA, AS, OC, SSA.
typeenumattack, vandalism, hate_speech, legislation, boycott, denial, threat.
severityenumlow, medium, high, critical.
beforets (ms)Solo incidentes con ts < before (paginación).
sincets (ms)Solo incidentes con ts >= since.
limitint1-100, default 20.
verifiedbool1 para solo incidentes con ≥ 2 fuentes corroborantes.
curl 'https://antisemitismo.kavnes.com/api/incidents?country=AR&limit=5'
{
  "ok": true,
  "count": 5,
  "data": [
    {
      "id": 2655, "ts": 1777350933399, "source_ts": 1776268920000,
      "country": "AR", "type": "attack", "severity": "medium",
      "description": "...",
      "description_es": "...",
      "description_en": "...",
      "original_language": "es",
      "source_label": "CLARIN", "source_url": "https://...",
      "source_count": 2, "credibility_score": 12,
      "additional_sources": [{ "label": "INFOBAE", "url": "..." }],
      "method": "ai"
    }
  ]
}
GET/api/incidents/:id

Devuelve un incidente puntual por ID. 404 si no existe.

curl https://antisemitismo.kavnes.com/api/incidents/2655

Agregados

GET/api/countries

Top países por conteo de incidentes en una ventana.

daysintVentana en días (1-365, default 30).
limitint1-50, default 20.
curl 'https://antisemitismo.kavnes.com/api/countries?days=7&limit=10'
GET/api/compare

Comparación período actual vs anterior (mismo número de días).

daysintVentana en días (1-180, default 30).
GET/api/index/continent

Score por continente: severidad × frescura, banda categórica fija. Usado por la home y el widget de embed.

daysintVentana (1-180, default 30).
curl 'https://antisemitismo.kavnes.com/api/index/continent?days=30'
{
  "ok": true, "days": 30, "ts": 1777350933399,
  "data": [
    { "code": "EU",    "label": { "es": "Europa", "en": "Europe" },
      "score": 431.2, "band": "critical", "count": 200,
      "critical": 0, "high": 62 },
    ...
  ]
}

Datos crudos

GET/api/stream

Items recolectados en el último ciclo (con un flag matched indicando si hicieron match con el lexicon de antisemitismo). Es el feed que alimenta el LIVE del dashboard. Se actualiza cada 10 minutos.

GET/api/matches

Items que hicieron match con keywords de antisemitismo, persistidos a través de ciclos. Subset del stream que no necesariamente pasó la clasificación a incidente.

langstringIdioma detectado.
sourcestringnewswires, reddit, telegram, adl, bellingcat.
countryISO-2Filtro por país.
beforetsPaginación.
sincetsCota inferior.
limitintDefault 50.
GET/api/matches/stats

Stats agregadas: matches por idioma, por fuente, por país.

daysintVentana (1-180, default 30).
GET/api/alerts

Alertas activas de anomalía (spike vs baseline). El endpoint funciona pero el strip está oculto en la UI hasta tener ≥ 8 semanas de baseline real (~ junio 2026).

Búsqueda & export

GET/api/search.csv

Mismos filtros que /api/search pero devuelve CSV (hasta 5000 filas). Headers Content-Disposition: attachment — descarga directa.

curl 'https://antisemitismo.kavnes.com/api/search.csv?country=AR&since=1777000000000' -o ar.csv

Operativo

GET/api/health

Healthcheck mínimo. Devuelve { "ok": true, "ts": ... }. Sirve para uptime monitors.

URLs de consumo

Además de los endpoints JSON, el monitor expone formatos pensados para consumo directo (no requieren parsing en el cliente):

Rate limits y licencia

Sin autenticación. Rate limit suave a través de express-rate-limit — uso razonable (un cycle cada minuto, batches de queries) está dentro del presupuesto. Crawlers que martillan reciben 429.

Los datos generados por el monitor (clasificación, traducciones, scores) están licenciados CC BY 4.0. Citá Monitor Global de Antisemitismo (2026), antisemitismo.kavnes.com. El texto original de las noticias pertenece a sus medios — respetá su licencia. Detalles en /legal.