Desarrolladores

Integra sin ingeniería inversa

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.

Entrada de datos

Publica por MQTT y ya está dentro

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.

Canal de publicación

// 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>

Mensaje

{
  "messageId": "3f2a...9c1",
  "timestamp": "2026-07-27T09:14:02.000Z",
  "eventType": "heartbeat",
  "payload": {},
  "measurements": {
    "temperature": 21.8,
    "humidity": 54.2,
    "battery_voltage": 3.15
  }
}
  • Se valida contra el modelo del dispositivo: lo que no cuadra, se rechaza
  • El identificador de mensaje hace idempotente el reenvío: un duplicado se descarta
  • Un modelo de dispositivo nuevo se declara, no se programa
Salida de datos

Tres formas de sacar lo que entra

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.

WebSocket

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.

Webhooks

La plataforma llama a tu sistema cuando pasa algo. Firmados, con protección contra reenvío, seis reintentos espaciados e historial de entregas consultable.

SDK de TypeScript

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.

  • Tipos derivados del contrato, no escritos a mano
  • Llaves de API con permisos granulares, denegados por defecto
  • La llave hereda el rol vivo de quien la creó: si esa persona pierde permisos, la llave se degrada
  • Cuota diaria por plan, con cabecera de reintento cuando se agota

Verificar un webhook

// 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.

Seguridad

Lo que preguntará vuestro responsable de sistemas

Resumen de lo que hay implementado. Para una revisión formal, pedidnos la documentación de seguridad y la respondemos por escrito.

Separación entre clientes

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.

Dispositivos

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.

Sesiones y accesos

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.

Salidas hacia fuera

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.

Trazabilidad

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.

Continuidad

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.

¿Habéis encontrado algo? Contadnos y lo tratamos con seriedad y sin ruido.
Límites conocidos

Lo que hoy no soportamos

Preferimos que lo descubras aquí y no a mitad de la integración.

Solo MQTT de entrada

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.

SDK solo en TypeScript

Desde otros lenguajes se consume la API REST directamente. El contrato en OpenAPI permite generar un cliente con las herramientas habituales.

Sin inicio de sesión federado

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.

Sin clientes de tus clientes

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.

Cuéntanos qué vas a integrar

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