Autenticación y tokens de API
Crea, usa, rota y revoca Bearer Tokens de Sanctum.
Rankion autentica las llamadas a la API exclusivamente mediante Bearer Tokens de Laravel Sanctum. No hay auth por cookie, no hay Basic Auth y no hay API keys sin token. Cada token está vinculado a un único usuario en un único team.
Crear un token
Los tokens se emiten desde la interfaz web — Rankion muestra el token en claro una sola vez, después solo queda el valor hasheado en la BD.
- Inicia sesión en rankion.ai.
- Abre Settings → API Tokens (enlace directo:
/settings/api-tokens). - Pulsa «Crear nuevo token», indica un nombre descriptivo (p. ej.
local-dev,n8n-prod,claude-code) y opcionalmente una fecha de expiración. - Copia el token inmediatamente a tu gestor de contraseñas o al
.envde tu aplicación. Una vez cerrado el diálogo, ya no estará visible.
RANKION_API_TOKEN=ranKion_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Usar el token
Cada request necesita dos headers:
Authorization: Bearer <tu-token>
Accept: application/json
En POST/PUT/PATCH añade Content-Type: application/json.
Ejemplo curl
TOKEN="$RANKION_API_TOKEN"
BASE="https://rankion.ai/api/v1"
# GET — listar proyectos
curl -H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
"$BASE/projects"
# POST — nuevo proyecto
curl -X POST "$BASE/projects" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"My Site","domain":"example.com"}'
Ejemplo de response
{
"data": {
"id": 42,
"name": "My Site",
"domain": "example.com",
"team_id": 7,
"created_at": "2026-05-01T08:30:00Z"
}
}
Team-Scoping
Cada token de Sanctum está scope al team. En concreto, esto significa:
- El token «conoce» el team del usuario en el momento de su creación.
- Todos los endpoints filtran recursos por
team_id. Si intentas leer o mutar un recurso de otro team, la API responde con403 Forbidden(sin fugas en el body — la existencia no se revela). - En el endpoint Image Gallery y algunos otros, el cross-team se responde incluso con
404, para que ni siquiera se filtre la existencia de un ID ajeno. - Si el usuario pertenece a varios teams y cambia de team, los nuevos tokens se vinculan al team activo. Los tokens existentes mantienen su scope original.
Rotar / revocar tokens
Los tokens no tienen «refresh» integrado. La rotación es un proceso de dos pasos:
- Crea un nuevo token en
/settings/api-tokens. - Cambia el cliente/job al nuevo token.
- Revoca el antiguo con el botón «Eliminar» de la misma página — desde ese clic, todas las requests con el token antiguo devuelven
401 Unauthenticated.
Ante una sospecha de fuga: revoca de inmediato y luego emite uno nuevo. La operación es destructiva pero segura — los jobs asíncronos en curso (p. ej. una generación de artículo) no se ven afectados, ya que se ejecutan internamente en el servidor.
Buenas prácticas
- Nunca commits en el frontend. Los tokens son credenciales puramente server-side. En código de navegador quedarían expuestos — las llamadas públicas hazlas a través de tu propio backend proxy.
- Un token por integración. Separa
n8n-prod,vercel-cron,claude-code-local. Si se filtra uno, solo revocas ese sin tocar los demás. - Variables de entorno en lugar de hardcoding.
process.env.RANKION_API_TOKEN/getenv('RANKION_API_TOKEN')— nunca como string en el repo. - Configura fecha de expiración para tokens temporales (p. ej. desarrollo local, migraciones puntuales).
- Nada de tokens en logs. Redacta el header
Authorizational loguear requests. - Solo HTTPS. Rankion no acepta llamadas HTTP — sin TLS el token quedaría comprometido al instante.
Códigos de error de la capa Auth
| Code | Cuándo |
|---|---|
401 Unauthenticated |
Token ausente, inválido, expirado o revocado |
403 Forbidden |
Token válido, pero el recurso pertenece a otro team (protección IDOR) |
429 Too Many Requests |
Rate limit por token superado — ver Créditos y rate limits |
Continúa con Créditos y rate limits.