⚡ API White-Label
Monta tu propio frontend y conéctalo al backend de TabletopCyber. La API v2 permite a empresas gestionar usuarios, sesiones de simulación, escenarios, webhooks y estadísticas de forma programática.
🏷️ ¿Qué es el modelo white-label?
El modelo white-label de TabletopCyber permite a empresas construir su propia interfaz de usuario y conectarse al motor de simulación de TabletopCyber vía API. Tu frontend, nuestro backend. Tú controlas la experiencia, nosotros gestionamos la lógica de simulación, los escenarios y la puntuación.
👤 ¿Para quién es?
Empresas de ciberseguridad, academias de simulación, departamentos de TI y cualquier organización que quiera ofrecer simulaciones tabletop a sus usuarios bajo su propia marca.
🚀 ¿Qué permite hacer?
Crear y gestionar usuarios, iniciar partidas de simulación, enviar decisiones programadas, consultar resultados, registrar webhooks para notificaciones en tiempo real y obtener estadísticas de uso.
✅ Ventajas
Marca propia sin desarrollar el motor de simulación. Integración con tus sistemas existentes vía API y webhooks. Escalable según tu plan. Soporte para múltiples escenarios de ciberseguridad basados en ataques reales.
🔐 Autenticación
Todos los endpoints de la API v2 requieren autenticación mediante el header X-API-Key. Tu API key tiene el formato tc_... y puedes generarla desde el panel de administración en tu perfil.Mantenla segura: no la expongas en código cliente accesible públicamente.
🔑 Gestionar claves: Para crear una nueva API key, usa el endpoint POST /api/api-keys desde el panel (requiere autenticación de sesión, no de API key). Las claves tienen scopes configurables: users, sessions, scenarios, webhooks, stats.
# Ejemplo: autenticación con API key en todos los requests
curl https://tabletopcyber.duckdns.org/api/v2/users \
-H "X-API-Key: tc_your_api_key_here"🔄 Flujo de integración
Estos son los pasos típicos para integrar tu frontend con la API v2 de TabletopCyber:
1. Crear usuario
POST /api/v2/users — Registra un usuario en tu tenant
2. Listar escenarios
GET /api/v2/scenarios — Explora los escenarios disponibles
3. Iniciar partida
POST /api/v2/sessions — Crea una sesión para el usuario y escenario
4. Enviar decisiones
POST /api/v2/sessions/{id}/decision — El usuario elige A/B/C/D cada ronda
5. Ver resultados
GET /api/v2/sessions/{id}/results — Obtiene puntuación y feedback
6. Recibir webhooks
Eventos user_created, session_completed, session_abandoned llegan a tu URL
👤 Endpoints — Usuarios
Gestiona los usuarios de tu tenant: crear, listar, ver, actualizar y eliminar.
/api/v2/usersX-API-KeyCrear usuario en el tenant
Crea un nuevo usuario dentro de tu organización. El usuario podrá iniciar sesiones de simulación inmediatamente.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
email | string | ✅ | Email único del usuario |
name | string | ✅ | Nombre completo del usuario |
password | string | ✅ | Contraseña (mín. 8 caracteres) |
Ejemplo de llamada
curl -X POST https://tabletopcyber.duckdns.org/api/v2/users \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"email": "student@company.com",
"name": "Jane Doe",
"password": "secure123"
}'Respuesta (200 OK)
{
"id": "usr_7f3a2b",
"email": "student@company.com",
"name": "Jane Doe",
"created_at": "2026-08-10T10:49:00Z",
"tenant_id": "tnt_a1b2c3"
}/api/v2/usersX-API-KeyListar usuarios del tenant
Devuelve todos los usuarios pertenecientes a tu organización, con paginación opcional.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
limit | integer | ❌ | Resultados por página (default 50, max 200) |
offset | integer | ❌ | Desplazamiento para paginación |
search | string | ❌ | Filtrar por nombre o email |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/users \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"users": [
{
"id": "usr_7f3a2b",
"email": "student@company.com",
"name": "Jane Doe",
"created_at": "2026-08-10T10:49:00Z"
},
{
"id": "usr_9k4m1n",
"email": "analyst@company.com",
"name": "John Smith",
"created_at": "2026-08-05T14:20:00Z"
}
],
"total": 2,
"limit": 50,
"offset": 0
}/api/v2/users/{user_id}X-API-KeyVer usuario específico
Obtiene los datos completos de un usuario concreto del tenant.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
user_id | string | ✅ | ID del usuario (path param) |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/users/usr_7f3a2b \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"id": "usr_7f3a2b",
"email": "student@company.com",
"name": "Jane Doe",
"created_at": "2026-08-10T10:49:00Z",
"last_login": "2026-08-10T12:30:00Z",
"sessions_count": 14,
"best_score": 8700
}/api/v2/users/{user_id}X-API-KeyActualizar usuario
Modifica el nombre o la contraseña de un usuario existente. Solo se actualizan los campos enviados.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
user_id | string | ✅ | ID del usuario (path param) |
name | string | ❌ | Nuevo nombre del usuario |
password | string | ❌ | Nueva contraseña (mín. 8 caracteres) |
Ejemplo de llamada
curl -X PUT https://tabletopcyber.duckdns.org/api/v2/users/usr_7f3a2b \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"name": "Jane Smith",
"password": "newpassword456"
}'Respuesta (200 OK)
{
"id": "usr_7f3a2b",
"email": "student@company.com",
"name": "Jane Smith",
"updated_at": "2026-08-10T12:50:00Z"
}/api/v2/users/{user_id}X-API-KeyEliminar usuario
Elimina permanentemente un usuario del tenant. Las sesiones históricas se conservan para estadísticas.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
user_id | string | ✅ | ID del usuario (path param) |
Ejemplo de llamada
curl -X DELETE https://tabletopcyber.duckdns.org/api/v2/users/usr_7f3a2b \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"deleted": true,
"id": "usr_7f3a2b"
}🎮 Endpoints — Sesiones de juego
Inicia partidas, envía decisiones, consulta estado y obtén resultados de las simulaciones.
/api/v2/sessionsX-API-KeyIniciar partida
Crea una nueva sesión de simulación para un usuario, vinculada a un escenario específico.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
scenario_id | string | ✅ | ID del escenario a jugar |
user_id | string | ✅ | ID del usuario que inicia la partida |
Ejemplo de llamada
curl -X POST https://tabletopcyber.duckdns.org/api/v2/sessions \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"scenario_id": "scn_ransomware_01",
"user_id": "usr_7f3a2b"
}'Respuesta (200 OK)
{
"session_id": "sess_a1b2c3",
"scenario_id": "scn_ransomware_01",
"user_id": "usr_7f3a2b",
"status": "active",
"current_round": 1,
"total_rounds": 8,
"narrative": "Un ransomware ha sido detectado en los servidores de la empresa...",
"choices": [
{ "id": "A", "text": "Aislar los servidores afectados inmediatamente" },
{ "id": "B", "text": "Contactar al equipo de IR y evaluar el alcance" },
{ "id": "C", "text": "Pagar el rescato para recuperar los datos" },
{ "id": "D", "text": "Apagar todos los servidores para contener" }
],
"created_at": "2026-08-10T12:00:00Z"
}/api/v2/sessionsX-API-KeyListar partidas
Lista las sesiones de simulación del tenant con filtros opcionales por estado y paginación.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
status | string | ❌ | Filtrar por estado: active, completed, abandoned |
limit | integer | ❌ | Resultados por página (default 20, max 100) |
offset | integer | ❌ | Desplazamiento para paginación |
Ejemplo de llamada
curl "https://tabletopcyber.duckdns.org/api/v2/sessions?status=active&limit=20" \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"sessions": [
{
"session_id": "sess_a1b2c3",
"scenario_id": "scn_ransomware_01",
"user_id": "usr_7f3a2b",
"status": "active",
"current_round": 3,
"total_rounds": 8,
"created_at": "2026-08-10T12:00:00Z"
},
{
"session_id": "sess_d4e5f6",
"scenario_id": "scn_phishing_02",
"user_id": "usr_9k4m1n",
"status": "completed",
"score": 8200,
"created_at": "2026-08-09T15:30:00Z"
}
],
"total": 2,
"limit": 20,
"offset": 0
}/api/v2/sessions/{session_id}X-API-KeyVer estado de partida
Obtiene el estado actual de una sesión de simulación: ronda actual, narrativa, decisiones disponibles y progreso.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
session_id | string | ✅ | ID de la sesión (path param) |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/sessions/sess_a1b2c3 \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"session_id": "sess_a1b2c3",
"scenario_id": "scn_ransomware_01",
"user_id": "usr_7f3a2b",
"status": "active",
"current_round": 3,
"total_rounds": 8,
"narrative": "El ransomware se ha propagado a 3 servidores adicionales. El equipo de IR ha llegado...",
"choices": [
{ "id": "A", "text": "Restaurar desde backup los servidores afectados" },
{ "id": "B", "text": "Negociar con los atacantes mientras se recupera" },
{ "id": "C", "text": "Notificar a las autoridades y activar el plan de continuidad" },
{ "id": "D", "text": "Desconectar la red externa completamente" }
],
"history": [
{ "round": 1, "choice": "B", "feedback": "Buena decisión: evaluar el alcance antes de actuar." },
{ "round": 2, "choice": "A", "feedback": "Aislar los servidores ha contenido la propagación parcialmente." }
],
"created_at": "2026-08-10T12:00:00Z"
}/api/v2/sessions/{session_id}/decisionX-API-KeyEnviar decisión
Envía la decisión del usuario para la ronda actual de la simulación. Avanza la partida a la siguiente ronda o la finaliza.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
session_id | string | ✅ | ID de la sesión (path param) |
choice | string | ✅ | Letra de la elección: A, B, C o D |
user_id | string | ✅ | ID del usuario que envía la decisión |
Ejemplo de llamada
curl -X POST https://tabletopcyber.duckdns.org/api/v2/sessions/sess_a1b2c3/decision \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"choice": "B",
"user_id": "usr_7f3a2b"
}'Respuesta (200 OK)
{
"session_id": "sess_a1b2c3",
"round": 4,
"feedback": "Contactar al equipo de IR ha sido la mejor opción. Han identificado el vector de entrada.",
"status": "active",
"next_narrative": "El equipo de IR ha identificado que el vector de entrada fue un email de phishing...",
"next_choices": [
{ "id": "A", "text": "Bloquear el dominio del email de phishing" },
{ "id": "B", "text": "Enviar un alerta a todos los empleados sobre el phishing" },
{ "id": "C", "text": "Implementar filtros de correo más agresivos" },
{ "id": "D", "text": "Realizar un ejercicio de phishing simulado" }
]
}/api/v2/sessions/{session_id}/resultsX-API-KeyVer resultados
Obtiene los resultados finales de una sesión completada: puntuación, decisiones, aciertos y áreas de mejora.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
session_id | string | ✅ | ID de la sesión (path param) |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/sessions/sess_a1b2c3/results \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"session_id": "sess_a1b2c3",
"user_id": "usr_7f3a2b",
"scenario_id": "scn_ransomware_01",
"status": "completed",
"score": 8700,
"max_score": 10000,
"correct_decisions": 6,
"total_rounds": 8,
"accuracy": 0.75,
"time_spent_seconds": 1240,
"strengths": [
"Detección temprana del incidente",
"Comunicación efectiva con el equipo de IR"
],
"improvements": [
"No se notificó a las autoridades en tiempo",
"Los backups no estaban verificados"
],
"rounds": [
{ "round": 1, "choice": "B", "correct": true, "feedback": "Evaluar el alcance antes de actuar" },
{ "round": 2, "choice": "A", "correct": true, "feedback": "Aislar servidores afectados" },
{ "round": 3, "choice": "C", "correct": true, "feedback": "Notificar a las autoridades" },
{ "round": 4, "choice": "B", "correct": false, "feedback": "Negociar con atacantes no es recomendado" }
],
"completed_at": "2026-08-10T12:20:00Z"
}📋 Endpoints — Escenarios
Explora los escenarios de simulación disponibles para tu tenant.
/api/v2/scenariosX-API-KeyListar escenarios disponibles
Lista todos los escenarios de simulación disponibles para tu tenant, con filtros opcionales por categoría y dificultad.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
category | string | ❌ | Filtrar por categoría: incident_response, phishing, ransomware, etc. |
difficulty | string | ❌ | Filtrar por dificultad: easy, medium, hard |
limit | integer | ❌ | Resultados por página (default 50) |
Ejemplo de llamada
curl "https://tabletopcyber.duckdns.org/api/v2/scenarios?category=incident_response&difficulty=medium" \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"scenarios": [
{
"id": "scn_ransomware_01",
"title": "Ransomware en Datacenter",
"category": "ransomware",
"difficulty": "medium",
"rounds": 8,
"description": "Un ransomware ha infectado los servidores del datacenter..."
},
{
"id": "scn_phishing_02",
"title": "Campaña de Phishing Dirigida",
"category": "phishing",
"difficulty": "easy",
"rounds": 6,
"description": "Empleados reportan emails sospechosos de suplantación..."
},
{
"id": "scn_ddos_03",
"title": "Ataque DDoS a Infraestructura",
"category": "infrastructure",
"difficulty": "hard",
"rounds": 10,
"description": "Un ataque DDoS sostenido está afectando los servicios..."
}
],
"total": 3
}/api/v2/scenarios/{scenario_id}X-API-KeyVer detalle de escenario
Obtiene la información completa de un escenario: descripción, rondas, decisiones posibles y objetivos de aprendizaje.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
scenario_id | string | ✅ | ID del escenario (path param) |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/scenarios/scn_ransomware_01 \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"id": "scn_ransomware_01",
"title": "Ransomware en Datacenter",
"category": "ransomware",
"difficulty": "medium",
"rounds": 8,
"description": "Un ransomware ha infectado los servidores del datacenter principal de la empresa. Como analista del SOC, debes contener la amenaza, coordinar la respuesta y minimizar el impacto.",
"learning_objectives": [
"Identificar vectores de entrada de ransomware",
"Aplicar técnicas de contención y aislamiento",
"Coordinar comunicación con stakeholders",
"Gestionar recuperación desde backups"
],
"estimated_time_minutes": 20
}🔗 Endpoints — Webhooks
Registra y gestiona webhooks para recibir notificaciones de eventos en tiempo real.
/api/v2/webhooksX-API-KeyCrear webhook
Registra una URL de endpoint para recibir notificaciones de eventos de tu tenant en tiempo real.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
url | string | ✅ | URL HTTPS que recibirá los POST de webhook |
events | string[] | ✅ | Lista de eventos a escuchar: user_created, session_completed, session_abandoned |
Ejemplo de llamada
curl -X POST https://tabletopcyber.duckdns.org/api/v2/webhooks \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"url": "https://your-app.com/webhooks/tabletop",
"events": ["user_created", "session_completed", "session_abandoned"]
}'Respuesta (200 OK)
{
"id": "wh_9x8y7z",
"url": "https://your-app.com/webhooks/tabletop",
"events": ["user_created", "session_completed", "session_abandoned"],
"active": true,
"created_at": "2026-08-10T12:00:00Z"
}/api/v2/webhooksX-API-KeyListar webhooks
Lista todos los webhooks configurados en tu tenant con su estado actual.
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/webhooks \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"webhooks": [
{
"id": "wh_9x8y7z",
"url": "https://your-app.com/webhooks/tabletop",
"events": ["user_created", "session_completed", "session_abandoned"],
"active": true,
"last_delivery": "2026-08-10T12:20:00Z",
"created_at": "2026-08-10T12:00:00Z"
},
{
"id": "wh_2m3n4p",
"url": "https://your-app.com/webhooks/alerts",
"events": ["session_abandoned"],
"active": false,
"last_delivery": null,
"created_at": "2026-08-05T10:00:00Z"
}
]
}/api/v2/webhooks/{webhook_id}X-API-KeyEliminar webhook
Elimina un webhook configurado. Las entregas en curso se completarán pero no se enviarán nuevas.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
webhook_id | string | ✅ | ID del webhook (path param) |
Ejemplo de llamada
curl -X DELETE https://tabletopcyber.duckdns.org/api/v2/webhooks/wh_9x8y7z \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"deleted": true,
"id": "wh_9x8y7z"
}📊 Endpoints — Estadísticas
Obtiene métricas agregadas de tu organización y de usuarios individuales.
/api/v2/statsX-API-KeyEstadísticas del tenant
Devuelve métricas agregadas de toda la organización: sesiones completadas, puntuaciones medias, usuarios activos, etc.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
from | string | ❌ | Fecha inicial (ISO 8601, ej: 2026-01-01) |
to | string | ❌ | Fecha final (ISO 8601, ej: 2026-08-10) |
Ejemplo de llamada
curl "https://tabletopcyber.duckdns.org/api/v2/stats?from=2026-01-01&to=2026-08-10" \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"tenant_id": "tnt_a1b2c3",
"period": { "from": "2026-01-01", "to": "2026-08-10" },
"total_users": 47,
"active_users": 32,
"total_sessions": 215,
"completed_sessions": 180,
"abandoned_sessions": 35,
"average_score": 7200,
"best_score": 9800,
"by_category": {
"ransomware": { "sessions": 78, "avg_score": 7400 },
"phishing": { "sessions": 92, "avg_score": 7100 },
"infrastructure": { "sessions": 45, "avg_score": 6900 }
},
"by_difficulty": {
"easy": { "sessions": 90, "avg_score": 7600 },
"medium": { "sessions": 95, "avg_score": 7100 },
"hard": { "sessions": 30, "avg_score": 6500 }
}
}/api/v2/stats/users/{user_id}X-API-KeyEstadísticas de un usuario
Obtiene métricas detalladas de un usuario específico: progreso, puntuaciones, áreas de mejora y participación.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
user_id | string | ✅ | ID del usuario (path param) |
Ejemplo de llamada
curl https://tabletopcyber.duckdns.org/api/v2/stats/users/usr_7f3a2b \
-H "X-API-Key: tc_your_api_key_here"Respuesta (200 OK)
{
"user_id": "usr_7f3a2b",
"name": "Jane Doe",
"email": "student@company.com",
"total_sessions": 14,
"completed_sessions": 12,
"abandoned_sessions": 2,
"average_score": 7800,
"best_score": 9200,
"current_streak": 3,
"by_category": {
"ransomware": { "sessions": 5, "avg_score": 8100 },
"phishing": { "sessions": 6, "avg_score": 7500 },
"infrastructure": { "sessions": 3, "avg_score": 7600 }
},
"skill_progression": {
"detection": 85,
"containment": 72,
"communication": 68,
"recovery": 60
},
"last_session": "2026-08-10T12:00:00Z"
}🔑 Endpoint adicional — API Keys
Este endpoint no es parte de la API v2. Se usa desde el panel de administración con autenticación de sesión.
/api/api-keysPanel / SessionCrear API key (desde el panel)
Genera una nueva API key para autenticarte en la API v2. Este endpoint NO es parte de la API v2: se usa desde el panel de administración con autenticación de sesión.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | ✅ | Nombre descriptivo de la API key |
scopes | string[] | ❌ | Ámbitos permitidos: users, sessions, scenarios, webhooks, stats |
Ejemplo de llamada
curl -X POST https://tabletopcyber.duckdns.org/api/api-keys \
-H "Content-Type: application/json" \
-H "X-API-Key: tc_your_api_key_here" \
-d '{
"name": "Production Integration",
"scopes": ["users", "sessions", "scenarios", "webhooks", "stats"]
}'Respuesta (200 OK)
{
"id": "key_1a2b3c",
"key": "tc_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"name": "Production Integration",
"scopes": ["users", "sessions", "scenarios", "webhooks", "stats"],
"active": true,
"created_at": "2026-08-10T12:00:00Z"
}🔗 Endpoints — Webhooks
Los webhooks permiten a tu aplicación recibir notificaciones de eventos en tiempo real. Registra una URL HTTPS mediante POST /api/v2/webhooks y TabletopCyber enviará un POST con el payload del evento a esa URL cada vez que ocurra.
Tu endpoint debe responder con 200 OK en menos de 10 segundos. Si no recibe respuesta exitosa, se reintentará hasta 3 veces con backoff exponencial (1s, 5s, 30s).
user_createdSe dispara cuando un nuevo usuario se crea en el tenant vía API.
Payload de ejemplo
{
"event": "user_created",
"tenant_id": "tnt_a1b2c3",
"data": {
"user_id": "usr_7f3a2b",
"email": "student@company.com",
"name": "Jane Doe"
},
"timestamp": "2026-08-10T12:00:00Z"
}session_completedSe dispara cuando una sesión de simulación termina (completada o abandonada).
Payload de ejemplo
{
"event": "session_completed",
"tenant_id": "tnt_a1b2c3",
"data": {
"session_id": "sess_a1b2c3",
"user_id": "usr_7f3a2b",
"scenario_id": "scn_ransomware_01",
"status": "completed",
"score": 8700,
"accuracy": 0.75
},
"timestamp": "2026-08-10T12:20:00Z"
}session_abandonedSe dispara cuando una sesión se abandona sin completar.
Payload de ejemplo
{
"event": "session_abandoned",
"tenant_id": "tnt_a1b2c3",
"data": {
"session_id": "sess_a1b2c3",
"user_id": "usr_7f3a2b",
"scenario_id": "scn_ransomware_01",
"rounds_completed": 3,
"total_rounds": 8
},
"timestamp": "2026-08-10T12:10:00Z"
}💡 Tip: Verifica la autenticidad del webhook incluyendo un secret en la URL de registro (ej: https://your-app.com/webhooks/tabletop?secret=xyzy validándolo en tu servidor.
⏱️ Rate Limiting
El acceso a la API v2 está disponible solo para planes personalizados con el addon de API activado. Los planes Free e Individual no tienen acceso a la API. Si excedes el límite, recibirás 429 Too Many Requests.Todos los responses incluyen el header X-RateLimit-Remaining con el número de peticiones restantes en el minuto actual..
| Tramo (plan personalizado) | Límite / Precio |
|---|---|
| Custom — 120 req/min | Incluido en base API (10€/mes) |
| Custom — 300 req/min | +8€/mes |
| Custom — 600 req/min | +15€/mes |
⚠️ Códigos de Error
| Código | Significado |
|---|---|
| 200 | OK — La petición se completó correctamente. |
| 400 | Bad Request — Faltan parámetros o son inválidos. |
| 401 | Unauthorized — API key ausente o inválida. |
| 403 | Forbidden — Sin permisos suficientes o API key inactiva. |
| 404 | Not Found — El recurso, usuario o sesión no existe. |
| 429 | Rate Limit Exceeded — Demasiadas peticiones. Revisa tu plan. |
| 500 | Internal Server Error — Error del servidor. Reintenta más tarde. |
Error format: Todos los errores devuelven JSON con la estructura: { "error": { "code": 404, "message": "Session not found" } }