Public JSON API — no authentication required. All data reflects human-confirmed articles only.API JSON pública — no requiere autenticación. Todos los datos reflejan solo artículos confirmados por humanos.
Monitor femicide coverage by countryMonitorear cobertura de femicidio por país
Fetch all confirmed articles for a specific country and date range to track media coverage over time. Useful for NGOs, journalists, and researchers monitoring reporting trends.
# Get all 2025 articles from Chile
fetch('http://femicide-watch.up.railway.app/api/articles?country=CL&year=2025')
.then(r => r.json())
.then(data => console.log(`${data.total} articles in ${Math.ceil(data.total/20)} pages`))
Research & academic analysisInvestigación y análisis académico
Export the full dataset for corpus analysis, NLP research, or comparative studies across countries. All articles include publication date, source, country, and snippet text.
# Python: collect all pages into a DataFrame
import requests, pandas as pd
articles = []
page = 1
while True:
r = requests.get(f'http://femicide-watch.up.railway.app/api/articles?country=CL&page={page}').json()
articles.extend(r['items'])
if page * r['per_page'] >= r['total']: break
page += 1
df = pd.DataFrame(articles)
df.to_csv('femicidio_chile.csv', index=False)
Daily alert systemSistema de alertas diarias
Poll the API daily to detect new confirmed articles and trigger alerts. Useful for building notification systems for advocacy organizations.
# Get today's confirmed articles
from datetime import date
import requests
today = date.today()
r = requests.get(
f'http://femicide-watch.up.railway.app/api/articles',
params={'country': 'CL', 'year': today.year, 'month': today.month}
).json()
todays = [a for a in r['items'] if a['published_date'] == str(today)]
print(f"Today: {len(todays)} confirmed articles")
Data visualizationVisualización de datos
Use the timeline endpoint to build charts showing monthly case counts. The data powers the timeline chart on the homepage.
// JavaScript: build a Chart.js bar chart
const data = await fetch('http://femicide-watch.up.railway.app/api/timeline').then(r => r.json());
const labels = data.monthly_counts.map(m => `${m.year}-${m.month}`);
const counts = data.monthly_counts.map(m => m.count);
// → plug into Chart.js, D3, Plotly, etc.