Integración
Todas las rutas bajo /api/… devuelven JSON (salvo errores). No se expone autenticación de Neo4j, Supabase ni MiniMax al cliente: solo las respuestas ya resueltas en el servidor.
En local, con npm run dev, la base suele ser http://127.0.0.1:3000. En producción, usa el origen de tu despliegue; ejemplo público actual:
https://q-threats.vercel.app
Sustituye en los ejemplos si tu instancia vive en otro host.
Las respuestas de /api/* incluyen cabeceras Access-Control-Allow-Origin: * y permiten GET, POST y preflight OPTIONS, para poder consumir la API desde el navegador en otro origen o desde herramientas habituales.
| Método | Ruta | Notas |
|---|---|---|
| GET | /api/threats | Lista de amenazas. Query opcional: q, level (high|medium|low|possible), limit (≥1, máx. 500). Respuesta: { data, truncated? }. |
| GET | /api/nodes | Nodos del demo. Query opcional: ids=id1,id2 (si falta, devuelve el conjunto por defecto). Respuesta: { data }. |
| GET | /api/departments | Departamentos (Guatemala). Respuesta: { data }. |
| GET | /api/analysis/[threatId] | Análisis por id de amenaza (ej. t1). Respuesta: { data } o 404. |
| GET | /api/legislation/[id] | Análisis vía identificador de iniciativa (Make). URL-encode el id. Respuesta: { data } o error. |
| GET | /api/recent-reports | Últimos reportes (Supabase law_risk_reports). 503 si no hay env. Respuesta: { data }. |
| GET | /api/graph | Grafo completo desde Neo4j únicamente. 503 sin variables de entorno. Query ?check=1 devuelve estado de configuración. |
| GET | /api/mcp/graph-snapshot | Snapshot de análisis/grafo: Neo4j en servidor o fallback demo. Respuesta: { source, data }. |
| GET | /api/mcp/context-pack | Texto consolidado (amenazas + grafo) para contexto de modelo. Respuesta: { text }. |
| POST | /api/chat | Chat con MiniMax (clave en servidor). Cuerpo: { messages: [{ role, content }] }. Respuesta: { reply } o { error }. |
Amenazas filtradas
curl -sS \ -H "Accept: application/json" \ "https://q-threats.vercel.app/api/threats?q=sanidad&limit=5"
Análisis de una amenaza
curl -sS \ -H "Accept: application/json" \ "https://q-threats.vercel.app/api/analysis/t1"
Chat (requiere MiniMax en el servidor del despliegue)
curl -sS -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"messages":[{"role":"user","content":"Resume las amenazas listadas."}]}' \
"https://q-threats.vercel.app/api/chat"