Primeros pasos

Autenticación

IVGraph utiliza dos métodos de autenticación: tokens JWT (para usuarios de la web mediante OAuth de Notion) y tokens de servicio (para agentes LLM y automatización).

OAuth de Notion (JWT)

IVGraph autentica a los usuarios mediante el flujo OAuth2 de Notion. No hay registro con nombre de usuario y contraseña.

Flujo

User clicks "Sign in with Notion"
        |
        v
GET /api/integrations/auth/notion/
        |  -> Redirects to Notion consent screen
        v
User authorizes IVGraph in Notion
        |
        v
Notion redirects to /api/integrations/auth/notion/callback?code=...
        |  -> Backend exchanges code for Notion token
        |  -> Creates/updates Django user
        |  -> Issues JWT tokens
        v
Redirect to dashboard with tokens in URL fragment

Tokens JWT

Token Vigencia Finalidad
Token de acceso 4 horas Autenticación en la API
Token de renovación 7 días Obtener un nuevo token de acceso

Uso del token de acceso:

curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \
  "https://ivgraph.com/api/notion-graph/"

Renovación de un token caducado:

curl -X POST "https://ivgraph.com/api/auth/refresh/" \
  -H "Content-Type: application/json" \
  -d '{"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."}'

Respuesta:

{"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."}

Cierre de sesión (inclusión del token de renovación en la lista de bloqueo):

curl -X POST "https://ivgraph.com/api/auth/logout/" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"refresh": "<refresh_token>"}'

Puntos de conexión de autenticación

Método Punto de conexión Descripción
GET /api/integrations/auth/notion/ Iniciar el flujo OAuth de Notion
GET /api/integrations/auth/notion/callback Devolución de llamada de OAuth (interna)
GET /api/integrations/auth/notion/status Consultar el estado de OAuth
POST /api/auth/refresh/ Renovar el token de acceso
POST /api/auth/logout/ Incluir el token de renovación en la lista de bloqueo
GET /api/auth/validate/ Comprobar si el token es válido
GET /api/auth/me/ Obtener información del usuario actual

Tokens de servicio (para agentes LLM)

Los tokens de servicio proporcionan acceso de larga duración, con permisos delimitados, a la API V1 de solo lectura. Están diseñados para agentes LLM, scripts de automatización y canalizaciones de CI/CD.

Formato del token

  • Prefijo: ivg_ (p. ej., ivg_a1b2c3d4e5f6...)
  • Longitud: 32 caracteres aleatorios después del prefijo
  • Almacenamiento: solo se guarda el hash SHA-256 en la base de datos; el token original se muestra una sola vez al crearlo

Crear un token

Mediante la API (requiere autenticación JWT):

curl -X POST "https://ivgraph.com/api/tokens/" \
  -H "Authorization: Bearer <jwt_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My LLM Agent",
    "scopes": ["graph:search", "graph:read", "graph:neighbors"],
    "workspace_ids": ["your-workspace-uuid"],
    "expires_in_days": 90
  }'

Respuesta (¡el token se muestra una sola vez!):

{
  "id": 1,
  "name": "My LLM Agent",
  "token": "ivg_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "prefix": "ivg_a1b2c3",
  "scopes": ["graph:search", "graph:read", "graph:neighbors"],
  "workspace_ids": ["your-workspace-uuid"],
  "is_active": true,
  "created_at": "2026-04-10T12:00:00Z",
  "expires_at": "2026-07-09T12:00:00Z"
}

Ámbitos de permisos

Ámbito Permite
graph:search Buscar nodos por título
graph:read Leer los detalles de los nodos y el contenido de las páginas
graph:neighbors Obtener nodos vecinos y recorrer rutas

Límites

  • Máximo de 10 tokens por usuario
  • Cada token debe tener al menos un ámbito de permisos
  • Cada token debe tener al menos un workspace_id (acceso denegado de forma predeterminada)
  • Caducidad opcional (expires_in_days): omite este parámetro para que el token no caduque

Gestión de tokens

Método Punto de conexión Descripción
GET /api/tokens/ Listar tus tokens (sin sus valores originales)
POST /api/tokens/ Crear un nuevo token
DELETE /api/tokens/<id>/ Revocar un token (de forma permanente)