API REST
Versionada bajo /api/v1 y documentada con OpenAPI. Consulta de series con
agregación automática, paginación por cursor para que el histórico grande no se atragante,
y errores con formato estándar.
El dato entra por MQTT y sale por donde tú quieras: API REST documentada, WebSocket en tiempo real o webhooks firmados hacia tus sistemas. El contrato de la API está publicado y el SDK se genera de él, así que no hay forma de que la documentación y el código se separen.
Cada dispositivo tiene sus propias credenciales y solo puede tocar sus propios canales: la autorización va denegada por defecto en el broker, no en la aplicación. El transporte va cifrado.
// eventos del dispositivo, con entrega asegurada imiot/v1/tenants/<org>/devices/<id>/events // órdenes hacia el dispositivo, y su acuse de recibo imiot/v1/tenants/<org>/devices/<id>/commands imiot/v1/tenants/<org>/devices/<id>/ack
Además, cada medida se replica en un árbol organizado por activos, para que un integrador se suscriba a una rama entera en lugar de a dispositivo por dispositivo.
imiot/v1/tenants/<org>/assets/<ruta>/<equipo>/<medida>
{
"messageId": "3f2a...9c1",
"timestamp": "2026-07-27T09:14:02.000Z",
"eventType": "heartbeat",
"payload": {},
"measurements": {
"temperature": 21.8,
"humidity": 54.2,
"battery_voltage": 3.15
}
}
Versionada bajo /api/v1 y documentada con OpenAPI. Consulta de series con
agregación automática, paginación por cursor para que el histórico grande no se atragante,
y errores con formato estándar.
El mismo canal que usa la consola para actualizarse sola. Te suscribes y recibes la telemetría y las alertas en cuanto ocurren, sin sondear.
La plataforma llama a tu sistema cuando pasa algo. Firmados, con protección contra reenvío, seis reintentos espaciados e historial de entregas consultable.
Se genera del propio contrato de la API, y la integración continua falla si el contrato y el código se separan. Lo que compila, existe.
// la firma cubre marca de tiempo y cuerpo, así que // un mensaje capturado no se puede reenviar más tarde const firmado = `${'${'}cabeceraTimestamp}.${'${'}cuerpoCrudo}`; const esperado = hmacSha256(secreto, firmado); if (!comparacionSegura(esperado, cabeceraFirma)) { throw new Error('firma no válida'); }
La firma y la marca de tiempo llegan en sus propias cabeceras. El secreto se guarda cifrado y se puede rotar.
Resumen de lo que hay implementado. Para una revisión formal, pedidnos la documentación de seguridad y la respondemos por escrito.
El aislamiento lo aplica la propia base de datos, no una condición en el código. Una consulta que se olvidara de filtrar no devolvería datos de otro cliente. Hay una batería de pruebas dedicada solo a comprobarlo, y se ejecuta en cada cambio.
Credenciales únicas por dispositivo y autorización denegada por defecto en el broker: cada equipo solo alcanza sus propios canales. El transporte va cifrado y el firmware verifica el certificado del servidor.
Contraseñas con el algoritmo recomendado hoy. Sesión corta con renovación rotatoria en cookie protegida. Los intentos de acceso están limitados por origen, y la recuperación de contraseña no revela si un correo existe.
Los webhooks no pueden usarse para alcanzar la red interna: las direcciones privadas, locales y de metadatos de nube están bloqueadas, tanto en IPv4 como en IPv6.
Registro de auditoría con quién, qué, cuándo y desde qué dirección, conservado un año. Si soporte necesita entrar en vuestra cuenta debe indicar el motivo, y al cerrar esa sesión el acceso se invalida al instante.
Copia diaria con treinta días de rotación y restauración verificada de verdad. Los despliegues van fijados a una versión concreta, así que volver atrás es una operación, no una reconstrucción.
Preferimos que lo descubras aquí y no a mitad de la integración.
No hay ingesta por HTTP, LoRaWAN, Modbus, OPC-UA ni Sparkplug. Lo habitual es que una pasarela traduzca a MQTT; si tu caso no lo permite, dínoslo antes de empezar.
Desde otros lenguajes se consume la API REST directamente. El contrato en OpenAPI permite generar un cliente con las herramientas habituales.
Hay acceso con usuario y contraseña y con cuenta de Google. Todavía no hay integración con el proveedor de identidad corporativo ni segundo factor propio.
La jerarquía es de una organización con su árbol de activos y sus permisos por rama. No hay todavía sub-organizaciones autogestionadas dentro de una cuenta.
Te damos acceso a la documentación de la API y resolvemos las dudas de arquitectura antes de que escribas la primera línea.
Hablamos