The Open IoT Protocol. Any Transport. Any Server.
TagoTiP is a lightweight, human-readable telemetry protocol for UDP, TCP, HTTP, and MQTT. The spec is open under Apache 2.0: run it on your own backend, or send to TagoIO today.
ESP32
Wi-Fi + BLE
STM32
LoRa + Cellular
Arduino
Ethernet
TagoIO
Cloud Platform
TagoDeploy
Dedicated Instance
Your Cloud
Any Provider
Local Server
On-Premise
PUSH|token|serial|temperature:=23.5#C GET|token|serial|humidity:=68#% ACK|200|OK|1 record saved PUSH|token|serial|temperature:=23.5#C GET|token|serial|humidity:=68#% ACK|200|OK|1 record saved Why TagoTiP
Built for constrained devices and real networks
Everything you need to send telemetry data reliably. Less overhead and more clarity.
Smaller Payloads
Compact pipe-delimited framing uses a fraction of the bandwidth of HTTP/JSON. 112 bytes vs 487 bytes for the same data. Critical for LTE-M, NB-IoT, LoRa, and satellite links.
Human-Readable
Read, write, and debug frames directly in your terminal or serial monitor. No binary parsers, no external tools. If you can read a pipe-delimited string, you can debug TagoTiP.
Transport-Agnostic
The same frame format works over UDP, TCP, MQTT, and HTTP. Switch transports without changing your device firmware or data pipeline.
Type-Safe by Design
Explicit assignment operators define numbers, strings, booleans, and GPS coordinates inline. No ambiguous JSON casting. The type is declared at the source.
Comparison
Less bytes. More signal.
See how TagoTiP compares with a standard HTTP/JSON request for IoT sensor readings.
POST /data HTTP/1.1
Host: api.tago.io
Content-Type: application/json
Authorization: ate2bd31...c0d0
[{
"variable": "temperature",
"value": 32.5,
"unit": "C"
}, {
"variable": "humidity",
"value": 65,
"unit": "%"
}] PUSH|4deedd7bab8817ec|sensor-01|
[temperature:=32.5#C;humidity:=65#%] Transports
One protocol. Every network.
TagoTiP's frame format is transport-agnostic. Send over any protocol your hardware or network supports.
UDP
Fire-and-forget telemetry. Minimal overhead for battery-powered, constrained hardware.
See FeatureSyntax
No ambiguity. No external schema.
Easy to use. Type operators are part of the frame itself.
Numbers & Units
Integer or decimal. Attach any unit with #.
# variable := value #unit
temperature:=32.5#C
pressure:=1013.25#hPa
battery:=3.7#V
Strings
Any text value. Status labels, version strings, named locations.
# variable = "text value"
status="running"
firmware="v2.3.1"
location_name="warehouse-A"
Booleans
Exact lowercase true or false. No other values accepted.
# variable ?= true | false
door_open?=true
alarm_active?=false
connected?=true
GPS Coordinates
lat, lng, or lat, lng, alt. Altitude always in meters.
# variable @= lat,lng[,alt]
location@=-35.28,149.12,600
# combined with number in one frame
[location@=-35.28,149.12;speed:=72#kmh]
PUSH|4deedd7bab8817ec|sensor-01|[temperature:=32.5#C;status="online";alarm?=false;pos@=-35.28,149.12,600] The TagoIO platform
Part of the TagoIO product family
TagoIO is a full-stack IoT cloud platform. Each product covers one part of building, running, and scaling an IoT solution.
Frequently Asked Questions
What is TagoTiP?
Which transports does TagoTiP support?
How much smaller is TagoTiP than HTTP/JSON?
Is TagoTiP free and open?
Do I need an SDK to use TagoTiP?
Do I need TagoIO to use TagoTiP?
Get Started
Start sending data in minutes
The TagoTiP spec is free and open under Apache 2.0. No SDK required: form the frame and send it to TagoIO or to any server that implements the spec.