How the platform works
An MQTT broker, an ingestion service, a stream, a processor, and a time-series database, with an API and a dashboard on top. This page describes each part and what it guarantees.
Overview
Devices talk MQTT to the broker. Everything after the broker is ours to run: ingestion writes to a durable stream, a processor commits each event to the database, and the API serves history and live updates to the dashboard.
Connectivity
The endpoint is TLS only and uses a publicly trusted certificate, so a standard CA bundle is enough. Each credential belongs to exactly one device, and the broker enforces what it may do.
- Host
mqtt.iotaps.com- Port
8883, TLS 1.2 or newer- Protocol
- MQTT 5 or 3.1.1, QoS 0 or 1
- Client ID
- The device ID; anything else is refused
- Username / password
- Credential ID and its one-time secret
- Topic
v1/{org}/{project}/{device}/telemetry, publish only- Credentials
- Up to five active per device, for rotation without downtime
Ingestion
A message passes four checkpoints. We only claim durability from a checkpoint we can show in metrics.
Broker-acknowledged
The broker accepted the publish. Your device gets its PUBACK here.
Platform-accepted
The envelope is valid and fsynced to the stream. Only then is the broker delivery acknowledged.
Persisted
One transaction stores the event, latest state, usage, and an outbox row.
Processed
Work after the commit, such as live updates, reads the outbox.
- Retries
- Device ID plus
message_idis deduplicated for seven days, so a redelivered or resent message is stored once. - Rejections
- Invalid payloads get a stable reason code, such as
invalid_jsonorpayload_too_large, and are listed on the device page with the start of the payload. - Dead letters
- An event that passed validation but cannot be stored is set aside with its error for an operator to replay or discard. It is not dropped.
History
Telemetry is stored in TimescaleDB. Short ranges return raw points; longer ranges return server-side buckets with the average, minimum, and maximum, so a 30-day chart is still one small response.
- Raw points
- Ranges up to 24 hours, at most 10,000 points
- Aggregates
- Ranges up to 30 days, min / avg / max per bucket
- Latest state
- Last value per metric, each with its own timestamp
- Timestamps
- Device time (
sent_at) and receive time are both kept - Retention
- 30 days during the beta
Live updates
An open device page receives committed events over Server-Sent Events, on the same HTTPS connection as the rest of the app. The stream rechecks your access every few seconds, so removing a member also ends their live view.
event: telemetry
data: {"device_id":"01a10e7f…","metrics":{"temperature_c":23.4}}
: keepalive
event: telemetry
data: {"device_id":"01a10e7f…","metrics":{"temperature_c":23.5}}
Teams and roles
Each organization is a separate tenant. Projects group devices, and four roles decide what a member can do. People sign in through OpenID Connect; IoTAPS does not store passwords.
| Action | Owner | Admin | Developer | Viewer |
|---|---|---|---|---|
| View devices, telemetry, usage | yes | yes | yes | yes |
| Create and manage devices | yes | yes | yes | no |
| Create, rotate, revoke credentials | yes | yes | yes | no |
| Create and rename projects | yes | yes | no | no |
| Invite and manage members | yes | yes, not owners | no | no |
| View the audit log | yes | yes | no | no |
| Grant or remove owner | yes | no | no | no |
Operations
- Usage counters
- Persisted messages and bytes, suppressed duplicates, and rejected messages, per organization and project, per day.
- Audit log
- Who created a device, revoked a credential, invited a member, or changed a role, and when.
- Service metrics
- Accepted, persisted, and rejected counts, stream lag, and end-to-end latency for each pipeline stage. We watch these; they are not exposed to customers yet.
Security
- TLS
- MQTT on 8883 and the web on HTTPS, with certificates renewed automatically.
- Device secrets
- High-entropy, shown once, stored as hashes.
- Broker ACLs
- Deny by default. A device may publish to its own topic and nothing else.
- Tenant isolation
- API authorization on every request, plus row-level security in the database.
- Service accounts
- Separate database roles and network policies per service.
- Sessions
- Server-side sessions in Secure, HttpOnly cookies, with CSRF protection.
Found a problem? Email hello@iotaps.com with “Security” in the subject.
Roadmap
No dates. Items move left when they ship.
Works today
- Device and credential lifecycle
- MQTT over TLS, durable ingestion
- History, aggregates, live view
- Organizations, roles, invitations
- Usage counters and audit log
- Rejection details per device
Being built
- Threshold and no-data alerts
- Email and signed webhook notifications
- Configurable dashboards
- CSV export
Later
- Commands to devices
- Fleet provisioning with claim codes
- API keys for server-to-server access
- Client spaces for integrators
Try it with your own devices
We onboard beta teams one at a time and help connect the first device.