API Documentation

Public REST API for NEXO Latinoamérica — integrate blog posts, newsletter subscriptions, and machine-readable page content into your agent or application.

Visión General

Base URL: https://nexolatam.org/api/v1 (recomendado). También se acepta la ruta sin versión https://nexolatam.org/api como alias de la versión estable actual. Cada respuesta incluye el encabezado X-API-Version.

Formato: JSON (Content-Type: application/json). El endpoint /api/markdown/* devuelve text/markdown.

OpenAPI spec: /openapi.json (también en /api/openapi)

Spec version: OpenAPI 3.1.0

Autenticación

Todos los endpoints públicos documentados aquí son accesibles sin autenticación. Los endpoints de administración (/api/admin/*) requieren sesión NextAuth y no son parte de la API pública.

💡 Para agentes: No se requiere API key. Envía requests directamente a los endpoints documentados. Respeta el encabezado Retry-After si recibes un 429.

Versionado y Deprecación

La API usa versionado por ruta (URI path). La versión estable actual es v1. Usa el prefijo /api/v1/… para fijar la versión explícitamente. Las rutas sin versión (/api/…) apuntan siempre a la versión estable más reciente.

Consulta la versión actual, el estado y la política de deprecación en el endpoint de metadatos:

GET/api/versionMetadatos de versión y política de deprecación
curl "https://nexolatam.org/api/version"
{
  "current": "v1",
  "latest": "v1",
  "status": "stable",
  "versioning": { "strategy": "uri-path", "example": "https://nexolatam.org/api/v1/blog" },
  "deprecationPolicy": {
    "noticePeriodDays": 180,
    "headers": ["Deprecation", "Sunset"]
  }
}
📅 Política de deprecación: Antes de retirar una versión damos un aviso mínimo de 180 días. Durante ese periodo, las respuestas afectadas incluyen los encabezados Deprecation y Sunset (RFC 8594) con la fecha de retiro.

Rate Limits

Los endpoints públicos aplican un límite de 60 solicitudes por minuto por IP. Cada respuesta de la API incluye encabezados estándar (RFC draft RateLimit) para que los agentes puedan auto-regularse:

EncabezadoDescripción
RateLimit-LimitMáximo de solicitudes permitidas en la ventana actual
RateLimit-RemainingSolicitudes restantes en la ventana actual
RateLimit-ResetSegundos hasta que se reinicia la ventana
RateLimit-PolicyPolítica declarada, ej. "60;w=60"
Retry-AfterSegundos a esperar antes de reintentar (solo en 429)
# Respuesta 429 (límite excedido)
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Demasiadas solicitudes. Intenta de nuevo más tarde.",
    "hint": "Respeta el encabezado Retry-After antes de reintentar.",
    "documentation": "https://nexolatam.org/docs"
  }
}
💡 Respeta siempre Retry-After y RateLimit-Remaining para evitar el 429.

Respuestas de Error

Todos los errores devuelven un objeto JSON estructurado con el mismo envelope:

{
  "error": {
    "code": "NOT_FOUND",          // Código de error legible por máquina
    "message": "Post no encontrado",  // Descripción en español
    "hint": "Verifica el slug y consulta /api/blog.", // Sugerencia de acción
    "documentation": "https://nexolatam.org/docs"
  }
}
HTTPcodeCuándo
400BAD_REQUESTCampos requeridos faltantes o formato inválido
404NOT_FOUNDRecurso no encontrado o no publicado
405METHOD_NOT_ALLOWEDMétodo HTTP no soportado (incluye encabezado Allow)
429RATE_LIMIT_EXCEEDEDLímite de solicitudes excedido (incluye Retry-After)
500INTERNAL_SERVER_ERRORError inesperado del servidor

Blog

GET/api/blogListar posts publicados

Devuelve una lista paginada de posts publicados con filtros opcionales por categoría, etiqueta y búsqueda de texto.

Query params

ParamTipoDefaultDescripción
pageinteger1Página (1-based)
limitinteger10Posts por página (máx 100)
categorystring—Slug de categoría
tagstring—Etiqueta exacta
searchstring—Texto libre (título y resumen)
curl "https://nexolatam.org/api/blog?page=1&limit=5&category=liderazgo"
GET/api/blog/{slug}Obtener un post por slug

Devuelve el contenido completo de un post publicado más hasta 3 posts relacionados. Incrementa el contador de vistas en cada lectura.

curl "https://nexolatam.org/api/blog/nexo-transforma-jovenes"
# Respuesta 404 (structured)
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Post no encontrado",
    "hint": "Verifica el slug y consulta /api/blog para ver todos los recursos disponibles.",
    "documentation": "https://nexolatam.org/docs"
  }
}

Newsletter

POST/api/subscribeSuscribirse al newsletter

Crea una nueva suscripción. Si el email ya existe y está activo, devuelve éxito sin duplicar. Si estaba dado de baja, lo reactiva.

curl -X POST "https://nexolatam.org/api/subscribe" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "María",
    "lastName": "García",
    "email": "[email protected]",
    "country": "México",
    "source": "newsletter_home"
  }'
# Respuesta 200
{ "success": true, "message": "¡Gracias por suscribirte! Pronto recibirás nuestros recursos." }

# Respuesta 400 (campos faltantes)
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Nombre y email son requeridos",
    "hint": "Incluye los campos firstName y email en el cuerpo JSON de la solicitud.",
    "documentation": "https://nexolatam.org/docs"
  }
}

Contenido Markdown

Devuelve el contenido de las páginas en formato Markdown puro. Diseñado para agentes de IA y scrapers que prefieren texto plano sobre HTML. Páginas desconocidas devuelven HTTP 404 con un mapa del sitio en Markdown para facilitar la navegación del agente.

GET/api/markdown/{slug}Contenido de página en Markdown

Slugs disponibles: homepara-jovenespara-organizacionessobre-alamaboutcontactprivacyblogllms

# Obtener sobre NEXO en Markdown
curl -H "Accept: text/markdown" "https://nexolatam.org/api/markdown/about"

# Responde con Content-Type: text/markdown; charset=utf-8
# y Vary: Accept, Accept-Encoding

Health Checks

GET/api/health/simpleProbe básico

Responde 200 { status: 'ok' } mientras el proceso esté activo. Ideal para load-balancers y monitores de uptime.

curl "https://nexolatam.org/api/health/simple"
# { "status": "ok", "timestamp": "2026-09-10T00:00:00.000Z" }
GET/api/healthHealth check completo

Incluye verificación de assets, versión de Node.js y tiempo de respuesta. Devuelve 503 si el servicio está degradado.

CLI Oficial

@nexolatam/cli es una herramienta de línea de comandos oficial (Node.js 18+, sin dependencias) para consumir la API desde la terminal o scripts de automatización.

# Instalación global
npm install -g @nexolatam/cli

# O sin instalar, con npx
npx @nexolatam/cli health

# Comandos disponibles
nexo health                 # Estado del servicio
nexo version                # Versión de la API y política de deprecación
nexo openapi                # Descargar el spec OpenAPI
nexo blog:list --limit 5    # Listar posts publicados
nexo blog:get <slug>        # Obtener un post por slug
nexo subscribe --email [email protected] --firstName Ana

# Opciones globales
--base <url>   # Base URL (default https://nexolatam.org/api/v1)
--json         # Salida JSON cruda
--help         # Ayuda
💡 El CLI usa por defecto la base versionada /api/v1 y respeta automáticamente los encabezados de rate limit.

Recursos para Agentes

¿Preguntas sobre la API?

Contacta al equipo técnico de NEXO Latinoamérica.

[email protected]
← Volver al inicio·OpenAPI spec·llms.txt