session — your player id (required, 1–128 chars)
event — what happened, e.g. tutorial_done (required, 1–80 chars)
ts — game timestamp (optional, 10–13 digit epoch; server time used if absent)
anything else — custom data, e.g. lvl, attempt, score (up to 24 extra fields, max 200 chars each)
let sessionId = Math.random().toString(36).slice(2);
function fire(event, extra = {}) {
const params = new URLSearchParams({ session: sessionId, event, ...extra });
fetch("https://lamalytic.xyz/g/YOURGAME/event?" + params);
}
fire("level_start", { lvl: 1 });
using UnityEngine.Networking;
static string sessionId = System.Guid.NewGuid().ToString().Substring(0, 8);
public static void Fire(string eventName, params string[] kv) {
string u = "https://lamalytic.xyz/g/YOURGAME/event?session=" + sessionId + "&event=" + eventName;
for (int i = 0; i < kv.Length; i += 2) u += "&" + kv[i] + "=" + kv[i + 1];
UnityWebRequest.Get(u).SendWebRequest();
}
Fire("level_start", "lvl", "1");
var session_id = str(randi()).substr(0, 8)
func fire(event_name: String, extra: Dictionary = {}) -> void:
var u := "https://lamalytic.xyz/g/YOURGAME/event?session=" + session_id + "&event=" + event_name
for key in extra:
u += "&%s=%s" % [key, str(extra[key])]
var http := HTTPRequest.new()
add_child(http)
http.request(u)
fire("level_start", {"lvl": 1})
curl "https://lamalytic.xyz/g/YOURGAME/event?session=test&event=hello&lvl=1"
curl -X POST "https://lamalytic.xyz/g/YOURGAME/event" \
-H "Content-Type: application/json" \
-d '{"session":"test","event":"level_done","props":{"lvl":1,"score":1200}}'
rate limit — 120 events per minute per IP per game.
export — CSV and JSON exports available from the admin page.
privacy — only anonymous session ids, event names and timestamps are stored. No IPs, no personal data.