REST · JSON · CORS habilitado

API Pública

Todos los endpoints documentados aquí son de acceso libre, sin autenticación. Puedes integrarlos en tus proyectos, bots o aplicaciones.

Base URL /

Citas y textos

destacado

Poemas, hadices, citas y fragmentos de la biblioteca del agente IA. Úsalos para mostrar contenido inspirador en tu proyecto.

GET /api/citas Lista todas las citas publicadas

Devuelve todas las citas publicadas, ordenadas por número de menciones del agente y fecha de creación.

Respuesta

[
  {"{"}
    "id": 1,
    "title": "Sobre los olivos",
    "author": "Mahmoud Darwish",
    "excerpt": "En esta tierra lo que hace la vida digna de vivir...",
    "text_type": "poem",
    "tags": ["palestina", "tierra", "dignidad"],
    "citation_count": 5
  {"}"}
]}

Ejemplo

curl //api/citas
GET /api/citas/random Cita aleatoria

Devuelve una cita aleatoria publicada. Ideal para widgets, pantallas de inicio o bots.

Respuesta

{
  "id": 3,
  "title": null,
  "author": "Ghassan Kanafani",
  "excerpt": "La resistencia es un acto de amor...",
  "text_type": "quote",
  "tags": ["resistencia", "amor"]
}

Ejemplo

curl //api/citas/random

text_type puede ser: poem quote hadith prose other

Artículos

GET /api/articles

Lista artículos publicados con paginación.

Parámetros

page number def: 1 Página (base 1)
per_page number def: 10 Resultados por página (máx. 100)
limit number def: 10 Alternativo a per_page
offset number def: 0 Alternativo a page
curl "//api/articles?page=1&per_page=5"
GET /api/articles/search

Búsqueda full-text en artículos publicados (PostgreSQL tsvector).

q string def: — Texto a buscar (requerido)
limit number def: 10 Máximo resultados (1–20)
curl "//api/articles/search?q=flotilla&limit=5"
GET /api/articles/{slug}

Artículo individual por slug. Devuelve 404 si no está publicado.

curl //api/articles/mi-articulo

Material gráfico

GET /api/media

Lista afiches, imágenes, videos y PDFs públicos. Acepta los mismos parámetros de paginación que /api/articles.

curl //api/media

Recaudación

GET /api/fundraising/current

Estado actual de la recaudación (yodono.cl). Cacheado cada 15 minutos.

{
  "amount_clp": 4250000,
  "goal_clp": 10000000,
  "description": "Flotilla Sumud Chile",
  "source_url": "https://yodono.cl/...",
  "fetched_at": "2026-03-23T12:00:00Z"
}

Equipo

GET /api/equipo

Lista miembros del equipo con perfil público activo, incluyendo conteo de artículos.

curl //api/equipo
GET /api/autor/{username}

Perfil público de un autor con sus últimos 20 artículos publicados.

Hoja de ruta

GET /api/roadmap

Hitos públicos del proyecto ordenados por fecha.

Colaboradores

GET /api/collaborators

Lista colaboradores activos ordenados por sort_order.

GET /api/hero-banners

Banners activos para el hero de la portada.

RSS

GET /rss/articulos.xml

Feed RSS de los 50 artículos más recientes. Responde Content-Type: application/xml.

curl //rss/articulos.xml
GET /rss/material.xml

Feed RSS de los 50 materiales más recientes. Responde Content-Type: application/xml.

curl //rss/material.xml

Analytics (eventos)

POST /api/analytics/event

Registra un evento de conversión. La IP se anonimiza con SHA-256.

{
  "event_type": "article_view",   // requerido
  "resource_id": 42,              // opcional
  "resource_slug": "mi-articulo", // opcional
  "user_agent": "Mozilla/..."     // opcional
}

Tipos válidos: article_view donation_click telegram_click media_download article_share media_share

Devuelve 204 No Content si es exitoso.

Valoraciones

GET /api/ratings/{type}/{id}

Estadísticas de valoración de un recurso. type es article o media.

{ "average": 4.6, "total": 23 }
POST /api/ratings

Enviar valoración de 1 a 5 estrellas para un artículo o material.

{ "resource_type": "article", "resource_id": 42, "stars": 5 }

Instagram

GET /api/instagram/posts

Publicaciones de Instagram sincronizadas.

channel_id number def: — Filtrar por canal (opcional)
limit number def: 20 Máximo 100
sort string def: recent "recent" o "popular"

Health

GET /health

Estado del sistema. Útil para monitoreo.

{
  "status": "ok",
  "db": "connected",
  "redis": "connected"
}

Todos los endpoints devuelven Content-Type: application/json y tienen CORS habilitado para cualquier origen. Los errores incluyen un campo error con descripción. Para integraciones o preguntas escribe a contacto@sumud.cl.