:::tip Tutorial Follow our step-by-step tutorial to connect your first device over HTTP: TagoTiP HTTP — Quick Start :::
Standard HTTP you already know - POST to send, GET to retrieve, HEAD to ping. A single Authorization header and a clean REST-style API. Works through every firewall and proxy.
http.tip.us-e1.tago.io52.223.14.18980 (HTTP) / 443 (HTTPS)http.tip.eu-w1.tago.io166.117.2.14080 (HTTP) / 443 (HTTPS)Both ports accept TagoTiP and TagoTiP(s) via URL path.
:::info Use HTTPS in production
Port 443 (HTTPS) for production. Port 80 (HTTP) for development or when TLS is handled externally.
:::
curl command gets you startedPOSTGETHEAD#include <WiFi.h>
#include <HTTPClient.h>
const char* SSID = "your-wifi";
const char* PASSWORD = "your-password";
const char* TIP_URL = "http://http.tip.us-e1.tago.io/v1/tip/sensor-01"; // replace serial
const char* TOKEN_HASH = "4deedd7bab8817ec"; // replace with yours
void setup() {
Serial.begin(115200);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println("WiFi connected");
}
void loop() {
if (WiFi.status() != WL_CONNECTED) return;
float temperature = analogRead(34) * 0.1; // example reading
char body[128];
snprintf(body, sizeof(body), "[temperature:=%.1f#C]", temperature);
char auth[64];
snprintf(auth, sizeof(auth), "TagoTiP %s", TOKEN_HASH);
HTTPClient http;
http.begin(TIP_URL);
http.addHeader("Authorization", auth);
http.addHeader("Content-Type", "text/plain");
int code = http.POST(body);
if (code == 200) {
Serial.print("Stored: ");
Serial.println(http.getString()); // "1"
} else {
Serial.print("Error: ");
Serial.println(code);
}
http.end();
delay(10000); // send every 10 seconds
}
Replace 4deedd7bab8817ec with your token hash and sensor-01 with your serial.
curl -X POST https://http.tip.us-e1.tago.io/v1/tip/sensor-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec" \
-H "Content-Type: text/plain" \
-d '[temperature:=25.5#C]'
1
curl -X POST https://http.tip.us-e1.tago.io/v1/tip/sensor-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec" \
-H "Content-Type: text/plain" \
-d '[temperature:=25.5#C;humidity:=60#%;active?=true]'
3
curl -X POST https://http.tip.us-e1.tago.io/v1/tip/sensor-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec" \
-H "Content-Type: text/plain" \
-d '@=39.74,-104.99@1694567890000^batch_01{firmware=2.1}[temperature:=25.5#C;humidity:=60#%]'
curl -X POST https://http.tip.us-e1.tago.io/v1/tip/tracker-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec" \
-H "Content-Type: text/plain" \
-d '[position@=39.74,-104.99,1609;speed:=45.2#km/h@=39.74,-104.99]'
curl -X POST https://http.tip.us-e1.tago.io/v1/tip/sensor-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec" \
-H "Content-Type: text/plain" \
-d '>xDEADBEEF01020304'
Raw bytes are delivered to your device's Payload Parser.
curl https://http.tip.us-e1.tago.io/v1/tip/sensor-01?variables=temperature,humidity \
-H "Authorization: TagoTiP 4deedd7bab8817ec"
[temperature:=25.5#C@1694567890000;humidity:=60#%@1694567890000]
curl -I https://http.tip.us-e1.tago.io/v1/tip/sensor-01 \
-H "Authorization: TagoTiP 4deedd7bab8817ec"
No command: 204 No Content
When a command is pending:
HTTP/1.1 200 OK
X-TagoTiP-CMD: reboot
POST /v1/tip/{serial} - Send DataAuthorization: TagoTiP <token-hash>text/plain200 OK - body is data point countGET /v1/tip/{serial}?variables=... - Retrieve DataAuthorization: TagoTiP <token-hash>variables=var1,var2,...200 OK - body is variable listHEAD /v1/tip/{serial} - Keepalive / CommandsAuthorization: TagoTiP <token-hash>204 No Content200 OK + X-TagoTiP-CMD headerPOST /v1/tips - TagoTiP(s) (Encrypted)application/octet-streamNo Authorization header. See Encryption.
:=temperature:=25.5=status=online?=active?=true@=position@=39.74,-104.99200 OK204 No Content400 Bad Requestinvalid_payload401 Unauthorizedinvalid_token404 Not Founddevice_not_found413 Payload Too Largepayload_too_large429 Too Many Requestsrate_limited500 Internal Server Errorserver_errorRPM = requests per minute.
Unlike TCP/UDP, HEAD (PING) counts toward the uplink RPM on HTTP.
For the complete protocol grammar, parsing rules, and ABNF, see the TagoTiP Specification.