TAD101 universal protocol

Message envelope

Inbound event (Device → Server)

Every event sent by any TAD101 device MUST conform to this JSON envelope.

json
{
  "tad": "1.0",
  "imei": "860000000000001",
  "ts": 1715000000,
  "payload": { ... }
}

Envelope fields

FieldTypeRequiredDescription
tadstringAlways "101"
vstringProtocol version, e.g. "1.0"
imeistringDevice hardware ID
eventstringEvent type (see below)
tsintegerUnix timestamp (UTC, device clock)
seqintegerSequence number (for dedup)
payloadobjectSensor data (see below)

Event types

eventMeaning
updateRegular telemetry / location update
heartbeatKeepalive with battery / mode info
punch_inWorker clock-in
punch_outWorker clock-out
sosEmergency alert
intercomPTT voice / audio event
registrationFirst connect / re-registration
alarmGeneric alarm (subtype in payload)
command_ackResponse to a server-sent command
config_reportDevice reports its current config
customDevice-defined event (with payload.custom_type)

Payload fields

All fields are optional. Devices send only what they have; the server maps non-null fields onto the signals schema.

json
{
  "lat": 31.5497,
  "lng": 74.3436,
  "alt": 215,
  "speed": 0,
  "direction": 0,
  "battery_pct": 87,
  "gsm_signal": -73
}

Outbound command (Server → Device)

json
{
  "cmd": "ping",
  "id": "cmd-abc123"
}

The device MUST respond with a command_ack event referencing cmd_id.

Pusher event naming

DirectionPusher eventTAD101 event
Device → Serverclient-tad101-signalupdate, punch_in, punch_out, …
Device → Serverclient-tad101-heartbeatheartbeat
Device → Serverclient-tad101-sossos
Device → Serverclient-tad101-ackcommand_ack
Server → Devicetad101-commandAny server command