Uso de la API REST
La API permite autenticar usuarios, administrar proyectos y dispositivos, consultar mensajes MQTT almacenados, revisar uso del plan, gestionar suscripciones y conectar el flujo de billing con PayPal. Los endpoints están pensados para dos usos principales: alimentar el dashboard web y permitir que los makers consulten su telemetría desde sistemas externos.
Base URL
La URL pública final de la API será el dominio principal de la plataforma.
https://kuska-iot.comAutenticación
Inicia sesión para obtener un JWT. En las peticiones protegidas envía ese valor en Authorization: Bearer.
curl -X POST https://kuska-iot.com/api/auth/login \
-H "content-type: application/json" \
-d '{"email":"usuario@example.com","password":"tu-password"}'{
"token": "eyJ..."
}Authorization: Bearer TU_TOKENTokens API generados por admin
Un administrador puede crear tokens desde /admin/users. Esos tokens son JWT de larga duración y se usan igual que el token de login.
curl https://kuska-iot.com/api/messages \
-H "Authorization: Bearer TOKEN_GENERADO"Cuenta
Registrar usuario
Crea una cuenta nueva para un maker o integrador. El usuario nace con rol user y plan Free por defecto, por lo que queda listo para entrar al dashboard y crear proyectos.
/api/auth/registerBody
{"name":"Ada Maker","email":"ada@example.com","password":"tu-password"}Iniciar sesión
Valida email y contraseña. Devuelve el JWT que se debe enviar como Bearer token en las rutas protegidas.
/api/auth/loginBody
{"email":"ada@example.com","password":"tu-password"}Respuesta ejemplo
{"token":"eyJ..."}Cerrar sesión
Endpoint liviano para cerrar sesión desde el cliente. Actualmente confirma la operación; el token se elimina del navegador en el frontend.
/api/auth/logoutRespuesta ejemplo
{"success":true}Cuenta actual
Devuelve los datos públicos de la cuenta autenticada. Sirve para reconstruir la sesión del dashboard y saber nombre, email, rol y plan sin exponer el passwordHash.
/api/auth/mecURL
curl https://kuska-iot.com/api/auth/me \
-H "Authorization: Bearer TU_TOKEN"Actualizar perfil
Actualiza nombre y email de la cuenta autenticada.
/api/auth/profileBody
{"name":"Ada Lovelace","email":"ada@kuska.dev"}cURL
curl -X PATCH https://kuska-iot.com/api/auth/profile \
-H "Authorization: Bearer TU_TOKEN" \
-H "content-type: application/json" \
-d '{"name":"Ada Lovelace","email":"ada@kuska.dev"}'Cambiar contraseña
Permite que el usuario autenticado cambie su contraseña. Requiere la contraseña actual y valida que la nueva tenga al menos 8 caracteres.
/api/auth/passwordBody
{"currentPassword":"password-actual","newPassword":"nuevo-password-seguro"}cURL
curl -X PATCH https://kuska-iot.com/api/auth/password \
-H "Authorization: Bearer TU_TOKEN" \
-H "content-type: application/json" \
-d '{"currentPassword":"password-actual","newPassword":"nuevo-password-seguro"}'Proyectos
Listar proyectos
Devuelve los proyectos del usuario autenticado. Es el punto de partida del dashboard para separar grupos de dispositivos y tópicos MQTT.
/api/projectscURL
curl https://kuska-iot.com/api/projects \
-H "Authorization: Bearer TU_TOKEN"Crear proyecto
Genera automáticamente el slug y el topic raíz MQTT del proyecto.
/api/projectsBody
{"name":"Planta piloto","description":"Sensores ESP32"}cURL
curl -X POST https://kuska-iot.com/api/projects \
-H "Authorization: Bearer TU_TOKEN" \
-H "content-type: application/json" \
-d '{"name":"Planta piloto","description":"Sensores ESP32"}'Consultar proyecto
Devuelve un proyecto específico del usuario autenticado. Útil para abrir una vista de detalle y cargar su configuración MQTT.
/api/projects/{id}Actualizar proyecto
Actualiza metadatos del proyecto, como nombre y descripción. No cambia automáticamente credenciales MQTT de dispositivos existentes.
/api/projects/{id}Body
{"name":"Planta piloto 2","description":"Nueva descripción"}Eliminar proyecto
Elimina el proyecto y sus dispositivos asociados.
/api/projects/{id}Dispositivos
Crear dispositivo
La respuesta incluye la contraseña MQTT una sola vez. Respeta el límite de dispositivos del plan.
/api/projects/{projectId}/devicesBody
{"name":"ESP32 Sala 1"}cURL
curl -X POST https://kuska-iot.com/api/projects/PROJECT_ID/devices \
-H "Authorization: Bearer TU_TOKEN" \
-H "content-type: application/json" \
-d '{"name":"ESP32 Sala 1"}'Listar dispositivos
Lista dispositivos del usuario. Puede filtrarse por proyecto para construir paneles, tablas de administración o integraciones externas.
/api/devices | /api/devices?projectId=PROJECT_ID | /api/projects/{projectId}/devicescURL
curl "https://kuska-iot.com/api/devices?projectId=PROJECT_ID" \
-H "Authorization: Bearer TU_TOKEN"Consultar dispositivo
Devuelve el detalle de un dispositivo propio, incluyendo datos operativos necesarios para mostrar su estado en el dashboard.
/api/devices/{id}Actualizar dispositivo
Permite cambiar nombre y estado manual.
/api/devices/{id}Body
{"name":"ESP32 Oficina","status":"online"}Eliminar dispositivo
Elimina un dispositivo del usuario autenticado. Debe usarse cuando el equipo deja de pertenecer al proyecto o se necesita liberar cupo del plan.
/api/devices/{id}Mensajes MQTT
Este endpoint consulta la telemetría persistida por el worker MQTT. Devuelve hasta 50 mensajes recientes del usuario autenticado y puede filtrarse por proyecto o dispositivo. La consulta respeta la retención del plan: Free 7 días, Starter 90 días, Pro 365 días, Business 730 días y Enterprise sin límite configurado.
GET /api/messages
GET /api/messages?projectId=PROJECT_ID
GET /api/messages?projectId=PROJECT_ID&deviceId=DEVICE_IDcurl "https://kuska-iot.com/api/messages?projectId=PROJECT_ID&deviceId=DEVICE_ID" \
-H "Authorization: Bearer TU_TOKEN"Plan, uso y billing
Uso del plan
Devuelve límites, uso del ciclo actual, porcentajes y flags para saber si puede crear dispositivos o guardar mensajes.
/api/billing/usageRespuesta ejemplo
{
"plan": { "id": "pro", "name": "Pro", "maxDevices": 100, "maxMessagesMonthly": 25000000 },
"usage": { "devices": 12, "messagesThisMonth": 5300 },
"allowed": { "createDevice": true, "storeMessage": true }
}cURL
curl https://kuska-iot.com/api/billing/usage \
-H "Authorization: Bearer TU_TOKEN"Suscripción actual
Devuelve el plan efectivo del usuario y, si existe, la suscripción local vinculada a PayPal.
/api/billing/subscriptioncURL
curl https://kuska-iot.com/api/billing/subscription \
-H "Authorization: Bearer TU_TOKEN"Crear checkout PayPal
Crea una suscripción PayPal para un plan pago y devuelve approvalUrl. Requiere PAYPAL_*_PLAN_ID reales en el entorno.
/api/billing/paypal/create-subscriptionBody
{"plan":"pro","interval":"month"}Respuesta ejemplo
{
"provider": "paypal",
"subscriptionId": "I-...",
"status": "APPROVAL_PENDING",
"approvalUrl": "https://www.sandbox.paypal.com/..."
}Webhook PayPal
Endpoint público para PayPal. Verifica la firma con PAYPAL_WEBHOOK_ID, guarda eventos idempotentes y actualiza users.plan cuando la suscripción se activa, suspende, cancela o expira.
/api/billing/paypal/webhookEjemplo con JavaScript
const token = 'TU_TOKEN'
const messages = await fetch('https://kuska-iot.com/api/messages?projectId=PROJECT_ID', {
headers: {
Authorization: `Bearer ${token}`
}
}).then((response) => response.json())
console.log(messages)Endpoints admin
Requieren usuario con rol admin. Sirven para operar la plataforma: ver métricas globales, administrar usuarios, asignar planes y emitir tokens API para cuentas registradas. No deben consumirse desde firmware ni desde dispositivos.
Métricas globales
Devuelve conteos globales de usuarios, dispositivos y mensajes. Es útil para el panel administrativo y para validar crecimiento de la beta.
/api/admin/statsListar usuarios
Devuelve usuarios registrados sin passwordHash. Permite revisar cuentas, roles, planes y datos básicos desde el dashboard admin.
/api/admin/usersAsignar plan a usuario
Cambia manualmente el plan de un usuario. Es útil mientras no hay pasarela completamente automatizada o para soporte comercial.
/api/admin/users/{id}/planBody
{"plan":"pro"}Listar tokens API
Lista tokens API activos generados para usuarios registrados. No devuelve el token completo ni su hash, solo metadatos y preview.
/api/admin/tokens?userId=USER_IDCrear token API
Genera un JWT de larga duración para que un usuario consuma la API desde integraciones externas. El token completo solo aparece en la respuesta de creación.
/api/admin/tokensBody
{"userId":"USER_ID","name":"Integración backend"}Respuesta ejemplo
{
"_id": "TOKEN_ID",
"userId": "USER_ID",
"name": "Integración backend",
"token": "eyJ...",
"tokenPreview": "eyJhbGciOiJI...abc123"
}Promover primer admin
Promueve una cuenta existente a admin usando ADMIN_BOOTSTRAP_KEY. Está pensado para inicializar el entorno; si la variable no existe, el endpoint queda deshabilitado.
/api/admin/bootstrapBody
{"email":"tu-email@example.com","key":"valor-de-ADMIN_BOOTSTRAP_KEY"}Notas de seguridad
- No compartas tokens en repositorios, firmware público o capturas.
- Los endpoints filtran datos por el usuario autenticado.
- Los tokens generados desde admin deben tratarse como credenciales de producción.
- Para producción, usa HTTPS y rota tokens comprometidos.
- El plan efectivo se actualiza por webhook verificado de PayPal o por acción admin.
- Los IDs PayPal de sandbox no funcionan en live y viceversa.